首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个对象以获得匹配的元素

比较两个对象以获得匹配的元素
EN

Stack Overflow用户
提问于 2019-10-07 16:30:33
回答 3查看 67关注 0票数 1

我正在比较两个结构相同的不同对象:

目标1:

代码语言:javascript
复制
[{
    "date": "2019-10-07",
    "price": "1313.01"
}, {
    "date": "2019-10-08",
    "price": "1276.21"
}, {
    "date": "2019-10-09",
    "price": "1257.75"
}]

目标2:

代码语言:javascript
复制
[{
    "date": "2019-10-07",
    "price": "2000.10"
}, {
    "date": "2019-10-09",
    "price": "1356.75"
}]

我正试图根据日期返回一系列的价格。在我的例子中,我试图返回

代码语言:javascript
复制
["2000.10", "1276.21", "1356.75"]

这个数组将返回对象2的所有价格。但是,您可以看到该对象2不包括"2019-10-08“的日期,所以我需要从对象1返回该日期的价格。这些对象长度是动态的,但是对象1总是比对象2长,因为我从对象1中得到了丢失的值。

返回的数组总是对象1的大小。我面临的问题是根据索引循环遍历和检查价格。

我的尝试是遍历对象1,然后检查每个索引的日期是否匹配。但是,当日期不匹配时,我遇到了问题,因此索引不同步。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-07 16:35:14

您可以使用Mapmap

  • 通过第一个数组使用date作为密钥
  • 循环从第二个数组创建Map,如果Mapper上有相应dateMapper使用价值,则使用当前元素H 211F 212的价格

代码语言:javascript
复制
let a = [{"date": "2019-10-07","price": "1313.01"},{"date":"2019-10-08","price": "1276.21"},{"date": "2019-10-09","price": "1257.75"}]
let b = [{ "date": "2019-10-07","price": "2000.10"},{"date": "2019-10-09","price": "1356.75"}]

let mapper = new Map(b.map(({ date, price }) => [date, price]))

let final = a.map(({ date, price }) => {
  return mapper.has(date) ? mapper.get(date) : price
})

console.log(final)

票数 3
EN

Stack Overflow用户

发布于 2019-10-07 16:44:09

您可以将这些转换为对象,然后合并这些对象并获取值:

代码语言:javascript
复制
const toObject = array => Object.fromEntries(
  array.map(
    ({date,price}) => [date, price]
  )
);

const prices = Object.values(
  Object.assign(
    toObject(array1),
    toObject(array2)
  )
);

您可以使用这种方法组合任意数量的数组:

代码语言:javascript
复制
const prices = Object.values(
  Object.assign(
    ...arrays.map(toObject)
  )
);

它将永远在同一日期的最后一个项目。

票数 1
EN

Stack Overflow用户

发布于 2019-10-07 16:46:40

使用mapfind,如果从arr2查找结果是undefined,那么将使用arr1的值。

代码语言:javascript
复制
const arr1 = [{
    "date": "2019-10-07",
    "price": "1313.01"
}, {
    "date": "2019-10-08",
    "price": "1276.21"
}, {
    "date": "2019-10-09",
    "price": "1257.75"
}];

const arr2 = [{
    "date": "2019-10-07",
    "price": "2000.10"
}, {
    "date": "2019-10-09",
    "price": "1356.75"
}];

const result = arr1.map((item) => (arr2.find((item2) => item.date === item2.date) || item).price);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58273639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档