为了账号安全,请及时绑定邮箱和手机立即绑定

比较两个对象以获取匹配元素

比较两个对象以获取匹配元素

Qyouu 2021-11-12 14:23:10
我正在比较具有相同结构的两个不同对象:对象 1:[{    "date": "2019-10-07",    "price": "1313.01"}, {    "date": "2019-10-08",    "price": "1276.21"}, {    "date": "2019-10-09",    "price": "1257.75"}]对象 2:[{    "date": "2019-10-07",    "price": "2000.10"}, {    "date": "2019-10-09",    "price": "1356.75"}]我正在尝试根据日期返回一组价格。在我的例子中,我试图返回["2000.10", "1276.21", "1356.75"]该数组将返回对象 2 的所有价格。但是,您可以看到对象 2 不包含“2019-10-08”的日期,因此我需要从对象 1 返回该日期的价格。这些对象长度是动态的,但对象 1 总是比对象 2 长,因为我从对象 1 中获取了缺失值。返回的数组将始终是对象 1 的大小。我面临的问题是循环遍历并根据索引检查价格。我的尝试是遍历对象 1,然后检查每个索引的日期是否匹配。但是,当日期不匹配时,我遇到了问题,因此索引不同步。
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

你可以使用一个Map和map


Map使用dateas 键从第二个数组创建一个

循环遍历第一个数组,如果日期可用于对应的Mapper使用值,否则使用当前元素的价格Mapperdate

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)


查看完整回答
反对 回复 2021-11-12
?
大话西游666

TA贡献1817条经验 获得超14个赞

您可以将它们转换为对象,然后合并它们并取值:


const toObject = array => Object.fromEntries(

  array.map(

    ({date,price}) => [date, price]

  )

);


const prices = Object.values(

  Object.assign(

    toObject(array1),

    toObject(array2)

  )

);

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


const prices = Object.values(

  Object.assign(

    ...arrays.map(toObject)

  )

);

它将始终采用具有相同日期的最后一项。


查看完整回答
反对 回复 2021-11-12
?
不负相思意

TA贡献1777条经验 获得超10个赞

使用mapand find,如果从arr2is 中找到结果undefined将使用 from 的值arr1。


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);



查看完整回答
反对 回复 2021-11-12
  • 3 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信