gpt4 book ai didi

javascript - 使用 Underscore.js 基于 1 个字段合并 2 个对象

转载 作者:行者123 更新时间:2023-11-30 11:46:46 26 4
gpt4 key购买 nike

我有 2 个对象数组:

var a = [
{ "image_id": 631293, "score": 73 },
{ "image_id": 11848407, "score": 56 }
];

var b = [
{ "image_id": 631293, "article_id": 173 },
{ "image_id": 11848407, "article_id": 121 }
];

我已尝试应用 How can i merge array of objects with underscore js 中描述的方法但不幸的是,它根本不起作用。

由于 image_id,我需要合并两个对象数组。

所以我尝试了这个:

_.values(
_.extendOwn(
_.indexBy(a, 'image_id'),
_.indexBy(b, 'image_id')
)
)

但是输出只是返回这个对象数组a

我需要得到:

[
{"image_id": 631293, "score": 73, "article_id": 173},
{"image_id": 11848407, "score": 56, "article_id": 121}
]

如何在不循环检查数组的每个元素并使用 findWhere 的情况下实现这一点?

最佳答案

使用 indexBy 是一个好的开始。然后循环并扩展一个:

var indexed = _.indexBy(a, 'image_id');

_.each(b, function(obj) {
var master = indexed[obj.image_id];
if (master) _.extend(master, obj);
});

或者如果你想要一个新数组并让原始对象保持不变:

var result = _.map(b, function(obj) {
var master = indexed[obj.image_id];
return _.extend({}, master, obj);
});

var a = [{
"image_id": 11848407,
"score": 56
}, {
"image_id": 631293,
"score": 73
}, {
"image_id": "dummy",
"score": 1
}];

var b = [{
"image_id": "test",
"article_id": 0
}, {
"image_id": 631293,
"article_id": 173
}, {
"image_id": 11848407,
"article_id": 121
}];

var indexed = _.indexBy(a, 'image_id');

_.each(b, function(obj) {
var master = indexed[obj.image_id];
if (master) _.extend(master, obj);
});

console.log(a);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

关于javascript - 使用 Underscore.js 基于 1 个字段合并 2 个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40725581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com