[英]Converting an array of strings, where each string is a key value pair, to an object
我是JS的新手,我想知道將JavaScript中的以下內容轉換為對象的最佳方法是什么? 我想保留已字符串化的鍵值對。
[
"\"Matt Forte : 17",
"C.J. Anderson : 16",
"Jamaal Charles : 16",
"Eddie Lacy : 15",
"Andre Ellington : 14",
"LeSean McCoy : 14",
"Marshawn Lynch : 14Tre Mason : 13",
"Latavius Murray : 13",
"Rashad Jennings : 12",
"Alfred Morris : 12",
"Jonathan Stewart : 12",
"Doug Martin : 12",
"Chris Ivory : 12",
"\""
]
我試過了,但是沒有用! 是否有任何內置函數可以為我做類似的事情? 也許我應該先將數據存儲為對象...
var players = [
"\"Matt Forte : 17",
"C.J. Anderson : 16",
"Jamaal Charles : 16",
"Eddie Lacy : 15",
"Andre Ellington : 14",
"LeSean McCoy : 14",
"Marshawn Lynch : 14Tre Mason : 13",
"Latavius Murray : 13",
"Rashad Jennings : 12",
"Alfred Morris : 12",
"Jonathan Stewart : 12",
"Doug Martin : 12",
"Chris Ivory : 12",
"\""
];
var obj = {};
for (var i = 0; i< players.length; i++) {
var tuple = players[i].split(":");
console.log(tuple);
for(var key in obj){
key = tuple[0];
obj[key] = tuple[1];
}
};
console.log(obj);
像這樣:
function prestoChango(ary){
var o = {};
for(var i=0,l=ary.length; i<l; i++){
var s = ary[i].split(/\s*\:\s*/);
o[s[0]] = +s[1];
}
return o;
}
console.log(prestoChango(arrayOfStrings));
var stringArray = [ "\\"Matt Forte : 17", "CJ Anderson : 16", "Jamaal Charles : 16", "Eddie Lacy : 15", "Andre Ellington : 14", "LeSean McCoy : 14", "Marshawn Lynch : 14Tre Mason : 13", "Latavius Murray : 13", "Rashad Jennings : 12", "Alfred Morris : 12", "Jonathan Stewart : 12", "Doug Martin : 12", "Chris Ivory : 12", "\\"" ]; var objectArray = stringArray.map(function(string) { var splat = string.replace("\\"", "").split(' : '); var obj = {}; obj[splat[0]] = splat[1]; return obj; }); console.log(objectArray);
嘗試使用RegExp拆分鍵和值:
var arr = [ "\\"Matt Forte : 17", "CJ Anderson : 16", "Jamaal Charles : 16", "Eddie Lacy : 15", "Andre Ellington : 14", "LeSean McCoy : 14", "Marshawn Lynch : 14Tre Mason : 13", "Latavius Murray : 13", "Rashad Jennings : 12", "Alfred Morris : 12", "Jonathan Stewart : 12", "Doug Martin : 12", "Chris Ivory : 12", "\\"" ]; //re-build proper key-value pairs arr = arr.join('').match(/([\\w|\\.\\s]*\\:\\s\\d*)/g); var obj = {}; var l = arr.length; var tmp; var rgx = /\\s?\\:\\s?/; while (l--) { tmp = arr[l].split(rgx); obj[tmp[0]] = tmp[1]; } document.write("<pre>"); document.write(JSON.stringify(arr)); document.write("<br/>"); document.write(JSON.stringify(obj, 0, 4)); document.write("</pre>");
使用map函數創建兩個新數組,分別包含鍵和值。
創建一個空對象,然后遍歷鍵或值數組。
var names = players.map(function(player) { return player.split(':')[0] }
var score = players.map(function(player) { return player.split(':')[1] }
var object = {}
for (var i = 0; i < names.length; i++) {
object[names[i]] = score[i];
}
這是我的輸出的樣子
{ 'Matt Forte': '17',
'C.J. Anderson': '16',
'Jamaal Charles': '16',
'Eddie Lacy': '15'
...
}
不幸的是,在數組的最后一項上,所有使用split
中斷發布的答案。 這是一種稍微復雜的方法,應該可以正常工作:
var object = {};
players.map(function(string) {
string.replace(/(.+) : (\d+)/,function($0,$1,$2){object[$1]=$2;});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.