簡體   English   中英

將每個字符串是鍵值對的字符串數組轉換為對象

[英]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));

使用Array.prototype.map

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM