2017-03-09 51 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; 
}; 
相关问题