gpt4 book ai didi

javascript - 如何根据重复键合并/组合对象数组?

转载 作者:行者123 更新时间:2023-11-29 21:12:23 24 4
gpt4 key购买 nike

我正在尝试合并任何重复键上的数据,同时重写数据对象。

我正在尝试根据每个对象是否具有相同的“时间”来合并值数组。之后,我想将项目中的每个值与名称配对。

我觉得最简单的展示方式就是通过我希望转化的原始数据,所以我想转化如下;

var data = [{
"item": ["1", "2"],
"time": "12-15",
"name": "ben"
}, {
"item": ["3", "4"],
"time": "12-15",
"name": "bill"
}, {
"item": ["1", "2", "3"],
"time": "15-18",
"name": "ben"

}, {
"item": ["4", "5", "6"],
"time": "15-18",
"name": "bill"
}];

进入

var result = [{
"time": "12-15",
"ben": ["1", "2"],
"bill": ["3", "4"]
},
{
"time": "15-18",
"ben": ["1", "2", "3"],
"bill": ["4", "5", "6"]
}]

我一直在尝试这个this问题来帮助我做到这一点,但我并没有走得太远。我似乎无法解决第一个选中的项目未作为数组输出的问题。

非常感谢任何帮助!

var data = [{
"item": ["1", "2"],
"time": "12-15",
"name": "ben"
}, {
"item": ["3", "4"],
"time": "12-15",
"name": "bill"
}, {
"item": ["1", "2", "3"],
"time": "15-18",
"name": "ben"

}, {
"item": ["4", "5", "6"],
"time": "15-18",
"name": "bill"

}];



var seen = {};
var result = data.filter(function(entry) {
var previous;

// Have we seen this label before?
if (seen.hasOwnProperty(entry.time)) {

// Yes, grab it and add this data to it
previous = seen[entry.time];
previous.item.push(entry.item);

// Don't keep this entry, we've merged it into the previous one
return false;
}
//console.log(seen)
// entry.data probably isn't an array; make it one for consistency
if (!Array.isArray(entry.item)) {
entry.item = [entry.item];
}

// Remember that we've seen it
seen[entry.time] = entry;

// Keep this one, we'll merge any others that match into it
return true;
});

console.log(result)

最佳答案

您可以使用哈希表进行分组。

var data = [{ "item": ["1", "2"], "time": "12-15", "name": "ben" }, { "item": ["3", "4"], "time": "12-15", "name": "bill" }, { "item": ["1", "2", "3"], "time": "15-18", "name": "ben" }, { "item": ["4", "5", "6"], "time": "15-18", "name": "bill" }],
result = [];

data.forEach(function (a) {
if (!this[a.time]) {
this[a.time] = { time: a.time };
result.push(this[a.time]);
}
this[a.time][a.name] = (this[a.time][a.name] || []).concat(a.item);
}, Object.create(null));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

或者对于 ES6,您可以使用 Map .

var data = [{ "item": ["1", "2"], "time": "12-15", "name": "ben" }, { "item": ["3", "4"], "time": "12-15", "name": "bill" }, { "item": ["1", "2", "3"], "time": "15-18", "name": "ben" }, { "item": ["4", "5", "6"], "time": "15-18", "name": "bill" }],
map = new Map,
result = [];

data.forEach(a => {
var o = map.get(a.time);
if (!o) {
o = { time: a.time };
map.set(a.time, o);
result.push(o);
}
o[a.name] = (o[a.name] || []).concat(a.item);
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何根据重复键合并/组合对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124832/

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