将字符串转换为多个对象(javascript)

时间:2018-06-15 09:13:18

标签: javascript json

我有以下字符串:Jack:13,Phil:15,Lucy:12我正在尝试从此字符串中获取对象。

此字符串将包含3个具有年龄的人物。如何实现这一目标?

我尝试了以下内容:

var s = 'Jack:13,Phil:15,Lucy:12'

var obj1 = eval("("+s+")");
var obj2 = JSON.parse(s);

记录任何obj变量都会返回错误。我在这里错过了一个简单的技巧吗?任何解释都将不胜感激,谢谢。

6 个答案:

答案 0 :(得分:3)

一般情况下,如果您正在替换字符串以将其转换为可以传递evalJSON.parse的字符串,那么这可能不是您最好的方法。特别是,尽可能避免使用eval(或其堂兄new Function)(您当然可以在这里),并且始终避免使用eval(或其堂兄) new Function)使用不受信任的输入。

split mapconst s = 'Jack:13,Phil:15,Lucy:12' const people = s.split(",") .map(e => e.split(":")) .map(([name, age]) => ({name, age})); console.log(people);

var s = 'Jack:13,Phil:15,Lucy:12'
var people = s.split(",")
  .map(function(e) { return e.split(":"); })
  .map(function(e) { return {name: e[0], age: e[1]}; });
console.log(people);

......或在ES5中:

map

我不确定为什么我会做两张地图而不是仅仅进行第二次分割并在同一回调中创建对象;我想我正在以“函数编程”的方式思考越来越多。我会更改它,但Eddie's answer已经在一个map中进行了更改,所以......

...(编辑)但是因为看起来你想要单独的属性而不是像Eddie那样使用这个人的名字,这里有一个例子,但只有一个const s = 'Jack:13,Phil:15,Lucy:12' const people = s.split(",") .map(e => { const [name, age] = e.split(":"); return {name, age}; }); console.log(people);

var s = 'Jack:13,Phil:15,Lucy:12'
var people = s.split(",")
  .map(function(e) {
    var parts = e.split(":");
    return {name: parts[0], age: parts[1]};
  });
console.log(people);

......或在ES5中:

SML

答案 1 :(得分:2)

您可以split()字符串并使用map()循环访问数组。这将返回一个对象数组。

var s = 'Jack:13,Phil:15,Lucy:12';

var result = s.split(',').map(o => {
  let [k, v] = o.split(':');
  return {[k]: v};
});

console.log(result);

如果您想要单个对象,可以使用reduce

var s = 'Jack:13,Phil:15,Lucy:12';

var result = s.split(',').reduce((c, o) => {
  let [k, v] = o.split(':');
  return Object.assign(c, {[k]: v});
}, {});

console.log(result);

答案 2 :(得分:2)

您可以尝试:

const result = s.split(',')
  .map(value => value.split(':'))
  .reduce((acc, [name, value]) => {
    acc[name] = +value;
    return acc;
  }, {});

输出:

{
  "Jack": 13,
  "Phil": 15,
  "Lucy": 12
}

答案 3 :(得分:2)

我确信你已经解决了很多方法,我想我会添加另一种方法

let s = 'Jack:13,Phil:15,Lucy:12'
let obj = {};

s.split(",").forEach(part => {
  obj[part.split(":")[0]] = part.split(":")[1];
})
console.log(obj);

这是一个简单的分割字符串,然后在新数组的每个项目上进行拆分并将结果推送到已经声明的空对象。

答案 4 :(得分:1)

您可以拆分零件并使用键/值对构建新对象。

var string = 'Jack:13,Phil:15,Lucy:12',
    result = Object.assign(...string
        .split(',')
        .map(s => (([k, v]) => ({ [k]: v }))(s.split(':')))
    );
        
console.log(result);

获取带对象的数组

var string = 'Jack:13,Phil:15,Lucy:12',
    result = string
        .split(',')
        .map(s => (([name, age]) => ({ name, age }))(s.split(':')));
        
console.log(result);

答案 5 :(得分:1)

轻松使用.map()

var s = 'Jack:13,Phil:15,Lucy:12';
var items = s.split(',')
    .map((entry) => entry.split(':'))
    .map((item) => ({name: item[0], age: item[1]}));

console.log(items);