JavaScript преобразует строку в объект, содержащий «:»

#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);