Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较具有不同属性名称的两个对象数组中的值?_Javascript - Fatal编程技术网

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 in
productsOne
设置一个布尔值,该值等于
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));