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

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


对象 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,然后检查每个索引的日期是否匹配。但是,当日期不匹配时,我遇到了问题,因此索引不同步。


Qyouu
浏览 150回答 3
3回答

牧羊人nacy

你可以使用一个Map和mapMap使用dateas 键从第二个数组创建一个循环遍历第一个数组,如果日期可用于对应的Mapper使用值,否则使用当前元素的价格Mapperdatelet 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)

大话西游666

您可以将它们转换为对象,然后合并它们并取值: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)  ));它将始终采用具有相同日期的最后一项。

不负相思意

使用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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript