我正在比较两个结构相同的不同对象:
目标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,然后检查每个索引的日期是否匹配。但是,当日期不匹配时,我遇到了问题,因此索引不同步。
发布于 2019-10-07 16:35:14
您可以使用Map和map
date作为密钥Map,如果Mapper上有相应date的Mapper使用价值,则使用当前元素H 211F 212的价格
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)
发布于 2019-10-07 16:44:09
您可以将这些转换为对象,然后合并这些对象并获取值:
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)
)
);它将永远在同一日期的最后一个项目。
发布于 2019-10-07 16:46:40
使用map和find,如果从arr2查找结果是undefined,那么将使用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);https://stackoverflow.com/questions/58273639
复制相似问题