2017-03-09 83 views
0

這裏內的特定鍵值是我處理的數據:使用Lodash或下劃線JS,我怎麼獲得基於另一個關鍵值相同的對象數組

myData = 
    [ { sn: '103261101', 
     status: 1, 
     qty: '189' 
     }, 
     { sn: '106009801', 
     status: 1, 
     qty: '12' 
     } 
    ]; 

我環路直通的另一個數組數據,我想將正確的數量與我正在推送數據的新數組關聯起來。它需要找到針對sn的數據。

product.push({ 
    'identifier' : dataJSON.msg[z].sku, 
    'size' : dataJSON.msg[z].size, 
    'quantity' : <Here is where I want to do a lodash/underscore find statement> 
}); 

例如 易於1-襯墊看myData的並存儲基於所述匹配的SN數量。在這種情況下,循環中的dataJSON.msg [z] .sku與myData中用於查找的sn值相同。

+0

這也許可以用勇氣呢? – jremi

+0

你會接受純粹的JS解決方案嗎? – RomanPerekhrest

+0

我對任何事情都很開放。但更少的線條更好。 – jremi

回答

1

您可以使用find來獲得正確的項目,然後只是獲得該項目的qty屬性。

_.find(myData, (item) => item.sn === dataJSON.msg[z].sku).qty

下面是它與lodash工作一的jsfiddle:https://jsfiddle.net/vzwst9o4/

上面的代碼是這個簡寫:

var matchingItem = _.find(myData, function (item) { 
    item.sn === dataJSON.msg[z].sku 
}); 
matchingItem.qty 

它應該工作一樣在lodashunderscore,因爲他們_.find功能工作相同。您也可以使用Javascript find作爲其他答案的建議,但使用lodash或下劃線可能會更好(尤其是如果您已在其他操作中使用lodash或下劃線),因爲它可確保跨瀏覽器兼容性。

+0

確定這一行是正確的嗎?您鍵入的部分... .sku).qty?語法看起來不正確。 – jremi

+0

是的,我相信這是正確的。什麼看起來不正確? _.find(...)返回一個對象,.qty訪問由_.find返回的對象的qty屬性。 – erikamjoh

+0

也許我錯了。這是爲了lodash或下劃線?抱歉我的困惑。 – jremi

0

考慮與Array.prototype.find()功能如下Ecmascript6解決方案:

product.push({ 
    'identifier' : dataJSON.msg[z].sku, 
    'size' : dataJSON.msg[z].size, 
    'quantity' : '' // default value, cause we can't refer to the 'identifier' key while initializing the object via literal 
}); 

var lastPos = product.length - 1; // the last `product` position 
if (o = myData.find((o) => o.sn === product[lastPos].identifier)) { 
    product[lastPos].quantity = o.qty; 
}; 
相關問題