#javascript #underscore.js
#javascript #underscore.js
Вопрос:
У меня есть список
data = [{
value1:[1,2],
value2:[{type:'A'}, {type:'B'}]
},{
value1:[3,5],
value2:[{type:'B'}, {type:'B'}]
}]
это мой формат списка, и я хочу, чтобы этот список был отформатирован как
data = [
{type:'A', value: [1,2]},
{type:'B', value: [3,5]}
]
Комментарии:
1. Откуда берется 4, также результатом являются недопустимые данные.
Ответ №1:
Если вы ожидаете следующего результата
data = [
{type:'A', value: [1,2]},
{type:'B', value: [3,5]}
]
это то, что вы хотите
data = [{
value1:[1,2],
value2:[{type:'A'}, {type:'B'}]
},{
value1:[3,5],
value2:[{type:'B'}, {type:'B'}]
}]
data.forEach(function(item, index){
var obj = {};
obj.type = item.value2[0].type;
obj.value = item.value1;
console.log(obj);
})
Ответ №2:
Вы можете сделать это с помощью двух forEach()
циклов и объекта в качестве thisArg
параметра в первом forEach()
цикле.
var data = [{
value1: [1, 2],
value2: [{
type: 'A'
}, {
type: 'B'
}]
}, {
value1: [3, 5],
value2: [{
type: 'B'
}, {
type: 'B'
}]
}]
var result = [];
data.forEach(function(o, i) {
var that = this;
o.value2.forEach(function(t) {
if (!that[t.type]) {
that[t.type] = {
type: t.type,
value: []
}
result.push(that[t.type]);
}
if (!that[i '|' t.type]) {
that[t.type].value = that[t.type].value.concat(o.value1);
that[i '|' t.type] = true;
}
})
}, {})
console.log(result)
Ответ №3:
Вы можете выполнить итерацию и выполнить поиск значений.
var data = [{ value1: [1, 2], value2: [{ type: 'A' }, { type: 'B' }] }, { value1: [3, 5], value2: [{ type: 'B' }, { type: 'B' }] }],
grouped = [];
data.forEach(function (a) {
a.value2.forEach(function (b) {
if (!this[b.type]) {
this[b.type] = { type: b.type, value: [] };
grouped.push(this[b.type]);
}
a.value1.forEach(function (c) {
if (this[b.type].value.indexOf(c) < 0) {
this[b.type].value.push(c);
}
}, this);
}, this);
}, Object.create(null));
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }