我有對象的兩個數組:的JavaScript:2個提問對JSON數據操作
data = [
{"value": 10.2, "cat": "A", "state": "MA"},
{"value": 5.3, "cat": "B", "state": "MA"},
{"value": 20.1, "cat": "A", "state": "NY"},
{"value": 17.3, "cat": "B", "state": "NY"},
{"value": 7.7, "cat": "A", "state": "CT"},
{"value": 11.3, "cat": "B", "state": "CT"}
];
reference = [
{"state": "MA", "increment": 4.1},
{"state": "NY", "increment": 0.3},
{"state": "CT", "increment": 20.6}
];
問題
我怎麼能拉離
reference
所有state
域,但沒有一個循環?具體而言,像這樣的函數reference.pullElement("state")
返回類似於["MA", "NY", "CT"]
的東西。這是否存在?我是否必須創建一個reference
對象並在方法中構建以下邏輯?var states = []; for (var i = 0; i < reference.length; i++) { states.push(reference[i]["state"]); }
我怎樣才能在
increment
字段添加從reference
到value
場data
,這樣我就可以有一個新的陣列是這樣的。output = [ {"value": 14.3, "cat": "A", "state": "MA"}, {"value": 9.4, "cat": "B", "state": "MA"}, {"value": 20.4, "cat": "A", "state": "NY"}, {"value": 17.6, "cat": "B", "state": "NY"}, {"value": 28.3, "cat": "A", "state": "CT"}, {"value": 31.9, "cat": "B", "state": "CT"} ];
我試圖做的問題2以下,但實際的數據有很多種類較多莫過於此。這是最有效的方法嗎?
var output = data.slice();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < reference.length; j++) {
if (data[i]["state"] == reference[j]["state"]) {
output[i]["value"] = data[i]["value"] + reference[j]["increment"];
}
}
}
謝謝!
你不要使用庫像下劃線做到這一點,或者你需要從頭開始的解決方案? –
Q1:[Array.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)。請注意,在內部,當然,您無法避免循環收集。 –
Q2:使用'state'作爲key和'increment'作爲value,將'reference'轉換爲一個對象。現在,您可以使用狀態鍵查找增量並避免嵌套循環。 –