Javascript 如何比较具有不同属性名称的两个对象数组中的值?
问题: 我正在处理两个包含一些产品数据的对象数组。它们包含一些相同的数据(不是全部),但属性名称在两者之间不共享。以下是一些示例数据:Javascript 如何比较具有不同属性名称的两个对象数组中的值?,javascript,Javascript,问题: 我正在处理两个包含一些产品数据的对象数组。它们包含一些相同的数据(不是全部),但属性名称在两者之间不共享。以下是一些示例数据: var productsOne = [ { item: '1234', price: '2.00', quantity: '2' }, { item: '5678', price: '7.19', quantity: '1' }, { item: '2432', price: '3.59', quantity: '10' } ] var produ
var productsOne = [
{ item: '1234', price: '2.00', quantity: '2' },
{ item: '5678', price: '7.19', quantity: '1' },
{ item: '2432', price: '3.59', quantity: '10' }
]
var productsTwo = [
{ itemNo: '2432', msrp: '3.59', inCart: '10' },
{ itemNo: '1234', msrp: '2.00', inCart: '2' },
{ itemNo: '5678', msrp: '7.19', inCart: '1' }
]
我需要比较这两个变量之间的值。(例如,检查任何productsOne
对象中item
的值是否等于任何productsWO
对象中itemNo
的值。)
我所尝试的:
我知道我需要使用map()方法或类似的方法,所以我从以下内容开始:
var itemNos = Array.prototype.map.call(productsTwo, function(obj) {
return obj.itemNo;
});
productsOne.map(function(obj) {
if (obj.item === itemNos) {
// do something
}
});
但我正在努力使用map(),特别是检查存储在不同属性名中的给定值。这是我应该采取的方法吗?解决方案:
检查任何productsOne对象中item的值是否等于
任何productsTwo对象中itemNo的值
或使用嵌套的forEach
s:
productsOne.forEach((o) => {
productsTwo.forEach((o2) => {
if(o.item === o2.itemNo) {
// `itemNo` value identical to `item` value found, do something
console.log('o.item '+o.item+' is equal to '+o2.itemNo)
}
})
})
您可以从productsWO
中创建一个itemNo
的集合,然后从productsOne
中筛选出在该集合中具有item
值的对象
如果您只想为“do some items inproductsOne
设置一个布尔值,该值等于productsWO
中的任何itemNo
值”,则可以使用(与提取的值集一起使用)
var productsOne=[
{项目:'1234',价格:'2.00',数量:'2'},
{项目:'5678',价格:'7.19',数量:'1'},
{项目:'2432',价格:'3.59',数量:'10'},
{商品:'hello',价格:'3.59',数量:'10'}
];
var productsTwo=[
{itemNo:'2432',msrp:'3.59',incontat:'10'},
{itemNo:'1234',msrp:'2.00',incontat:'2'},
{itemNo:'5678',msrp:'7.19',incontat:'1'}
];
var itemNos=新集合(productsTwo.map(p=>p.itemNo));
log(Array.from(itemNos));
var common=productsOne.filter(p=>itemNos.has(p.item));
console.log(通用);
log(productsOne.some(p=>itemNos.has(p.item))代码>我认为这应该有效:
var productsOne = [
{ item: '1234', price: '2.00', quantity: '2' },
{ item: '5678', price: '7.19', quantity: '1' },
{ item: '2432', price: '3.59', quantity: '10' }
]
var productsTwo = [
{ itemNo: '2432', msrp: '3.59', inCart: '10' },
{ itemNo: '1234', msrp: '2.00', inCart: '2' },
{ itemNo: '5678', msrp: '7.19', inCart: '1' }
]
var matchedItems = productsOne.map(o1 => productsTwo.some(o2 => o1.item === o2.itemNo));
var productsOne = [
{ item: '1234', price: '2.00', quantity: '2' },
{ item: '5678', price: '7.19', quantity: '1' },
{ item: '2432', price: '3.59', quantity: '10' }
]
var productsTwo = [
{ itemNo: '2432', msrp: '3.59', inCart: '10' },
{ itemNo: '1234', msrp: '2.00', inCart: '2' },
{ itemNo: '5678', msrp: '7.19', inCart: '1' }
]
var matchedItems = productsOne.map(o1 => productsTwo.some(o2 => o1.item === o2.itemNo));