2016-10-03 70 views
0

嘿家伙我有一个小问题。javascript中的小迭代

有人可以告诉我怎样才能把这个字符串分成json格式的数据吗?

one:apple;two:orange;three:bananna;four:pears 

看起来像这样

{ 
    one: apple, 
    two: orange, 
    three: bananna, 
    four: pears 
} 

回答

6

使用Array#forEachString#split

var str = "one:apple;two:orange;three:bananna;four:pears"; 
 
var obj = {}; 
 
str.split(';').forEach(function(el) { 
 
    var x = el.split(':'); 
 
    obj[x[0]] = x[1]; 
 
}); 
 
console.log(obj);

或者使用Array#reduce

comma operator评估它的每个操作数(从左到右)并返回最后一个操作数的值。

var str = "one:apple;two:orange;three:bananna;four:pears"; 
 
var obj = str.split(';').reduce(function(a, b) { 
 
    var x = b.split(':'); 
 
    return a[x[0]] = x[1], a; 
 
}, {}); 
 
console.log(obj);

+0

谢谢!一直在挣扎这么久=] –

+0

@VietLe - - 我很高兴它帮助! _快乐编码_ – Rayon

+1

@Rayon [击败我](https://jsfiddle.net/3c7x1jws/) –

1

DEMO

var str = "one:apple;two:orange;three:bananna;four:pears"; 
var arr = str.split(';'), obj = {}, i = 0; 
for(; i < arr.length; i++){ 
    var x = arr[i].split(':'); 
    obj[x[0]] = x[1] 
}; 
console.log(obj); 
x = null; 

// thanks to @Rayon for edit 
+1

不要两次使用'arr [i] .split' ..你可以把它保存在变量中.. – Rayon

0

您可以使用正则表达式来做到这一点。

var str = "one:apple;two:orange;three:bananna;four:pears" 
 

 
var obj = '{"'+ str.replace(/;/g, ',').replace(/[:+,]/g, '"$&"') + '"}' 
 
console.log(JSON.parse(obj))