将字符串数组转换为键值对对象

6
我得到的输出看起来像这样:
var x = ["title: x_one", " description: 1", " value: 4"] 

其中x[0]返回的是title: x_one,是一个字符串。我无法读取title属性。如何将其转换为对象,以便最终能够循环遍历数组并读取诸如title、description和value等属性。

我正在尝试使用jquery实现这一点。

我一直在寻找解决方案,但还没有真正找到。如果有我错过的解决方案,我会非常感激任何人能指出来。


你从哪里获取输出?看起来应该是 JSON 格式,但格式不正确。 - LavaSlider
1
使用 split(':') 将值分割为属性名称和值。 - Barmar
5个回答

15
循环遍历数组,在:字符处拆分值。然后在对象中将第一部分用作属性名称,第二部分用作值。
var obj = {};
for (var i = 0; i < x.length; i++) {
    var split = x[i].split(':');
    obj[split[0].trim()] = split[1].trim();
}

3
谢谢,你之前回答了我的几个问题,都很准确 :-)。感谢你的帮助,让我理解这些概念。 - soum

2

良好地使用Lambda(MOZ-Array函数)功能。尽管新手和一些中级开发者可能会因缺乏其他语言的知识和经验而误用它的优点和缺点,即使是对于JS/JQ也是如此。 - GoldBishop

2

尝试使用这个函数,我已经测试过了。

 var a=new Array();
    for(var i=0;i<x.length;i++){
    var tmp=x[i].split(":")
    a[tmp[0]]=tmp[1]
    }

1
除了你不当地使用 new Array() 之外,那和我的答案完全一样。 - Barmar

0
假设在创建此数组之前您有一个对象,则无需将其转换为任何内容。使用jQuery的each函数,您可以获取值和键。
$.each( obj, function( key, value ) {
  alert( key + ": " + value );
});

如果这是最终输出,那么在循环时可以直接使用String.prototype.split。

3
这是一个数组,不是对象。键将仅为数组索引01等。 - Barmar

0

刚刚碰巧看到这个。这里有另一个解决方案适用于 OP 的原始数组。

var x = ["title: x_one", " description: 1", " value: 4"] 


function mapper(str)
{
    var o = {};
    strArr = str.split(":");
    o[strArr[0].trim()] = strArr[1].trim();
    return o;
}


var resultArray = x.map(mapper);
console.log(resultArray[0].title);
console.log(resultArray[1].description);
console.log(resultArray[2].value);

fiddle

{{链接1:fiddle}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接