#javascript #arrays #node.js #dictionary
#javascript #массивы #node.js #словарь
Вопрос:
У меня есть следующая строка, var xx = "website:https://google.com";
которую я пытаюсь преобразовать в словарь, {website:"https://google.com"}
обычно я использую str.split(":")
, но здесь у меня есть несколько :
Я могу использовать функцию replace, но каков наилучший способ сделать это?
Комментарии:
1.
{website:https://google.com}
недопустимый синтаксис…2. В JavaScript нет словарей, они называются объектами .
3. Вы имеете в виду, что хотите получить
{website: "https://google.com"}
?
Ответ №1:
const strToDictionary = kColonV => {
const tmpArray = kColonV.split(':')
const k = tmpArray.shift()
const v = tmpArray.join(':')
return {[k]:v}
}
var xx = "website:https://google.com";
strToDictionary(xx) // Object { website: "https://google.com" }
Или, возможно, просто:
const toDictonary = str => { return {[str.split(':')[0]]:str.substr(str.indexOf(':') 1)} }
toDictionary(xx) // Object { website: "https://google.com" }
Есть много способов выразить это.
class Dictionary extends Object {};
const kvToDict = str => Dictionary.assign( // No need to do this, but it's interesting to explore the language.
new Dictionary(),
{[str.slice(0, str.indexOf(':'))]:str.slice(str.indexOf(':') 1)}
)
const kvDict = kvToDict("website:https://google.com")
console.log(kvDict.constructor, kvDict) // Dictionary(), { website: "https://google.com" }
Мне нравится этот:
const kvToObj = str => Object.assign(
{},
{[str.slice(0, str.indexOf(':'))]:str.slice(str.indexOf(':') 1)}
)
kvToObj("website:https://google.com") // Object { website: "https://google.com" }
Ответ №2:
Вы можете разделить при первом появлении :
.
var xx = "website:https://google.com";
xx = xx.split(/:(. )/);
var dictionary = {[xx[0]]:xx[1]};
console.log(dictionary);