Используя методы Array reduce
и findIndex
, это может быть достигнуто.
var myArray = [{
group: "one",
color: "red"
}, {
group: "two",
color: "blue"
}, {
group: "one",
color: "green"
}, {
group: "one",
color: "black"
}];
var transformedArray = myArray.reduce((acc, arr) => {
var index = acc.findIndex(function(element) {
return element.group === arr.group;
});
if (index === -1) {
return acc.push({
group: arr.group,
color: [arr.color]
});
}
acc[index].color.push(arr.color);
return acc;
}, []);
console.log(transformedArray);
Используя функцию reduce
, массив является итератором, а новые значения сохраняются в параметре acc (accumulating)
. Чтобы проверить, существует ли объект с заданным group
, мы можем использовать функцию findIndex
.
Если findIndex()
возвращает -1, значение не существует, поэтому добавьте массив в acc
параметр.
Если findIndex()
возвращает индекс, то обновите index
с помощью значений arr
.
Я решил это, используя еще одну ссылку плагина gulp-data
в нижней части документации. Я заменил through.obj
на объект gulp-data
, и теперь он работает. Я изо всех сил пытаюсь сделать простые вещи с глотком, поэтому мой совет - держаться подальше.