#javascript #arrays
#javascript #массивы
Вопрос:
Здравствуйте, я хочу объединить массив на основе уникального элемента в массиве.
Объект, который у меня есть
totalCells = []
В этом массиве totalCells у меня есть несколько подобных объектов
totalCells = [
{
cellwidth: 15.552999999999999,
lineNumber: 1
},
{
cellwidth: 14,
lineNumber: 2
},
{
cellwidth: 14.552999999999999,
lineNumber: 2
},
{
cellwidth: 14,
lineNumber: 1
}
];
Теперь я хочу создать массив, в котором у меня есть комбинация массива на основе lineNumber.
Например, у меня есть объект со свойством lineNumber и коллекцией cellWidth. Могу ли я это сделать?
Я могу перебирать каждую строку и проверять, совпадает ли номер строки, а затем нажимать эту ширину ячейки. Есть ли какой-нибудь способ, который я могу понять?
Я пытаюсь получить такой результат.
totalCells = [
{
lineNumber : 1,
cells : [15,16,14]
},
{
lineNumber : 2,
cells : [17,18,14]
}
]
Комментарии:
1. w3schools.com/jsref/jsref_concat_array.asp
2. Я хочу объединить на основе lineNumber
3. можете ли вы показать, какой результат вы пытаетесь получить?
4. Ваши объекты недопустимы. Объекты, заключенные в
{ ... }
,[...]
предназначены только для массивов.5. Это массив с вложенным объектом с массивом
Ответ №1:
var newCells = [];
for (var i = 0; i < totalCells.length; i ) {
var lineNumber = totalCells[i].lineNumber;
if (!newCells[lineNumber]) { // Add new object to result
newCells[lineNumber] = {
lineNumber: lineNumber,
cellWidth: []
};
}
// Add this cellWidth to object
newcells[lineNumber].cellWidth.push(totalCells[i].cellWidth);
}
Ответ №2:
Как насчет чего-то подобного :
totalCells.reduce(function(a, b) {
if(!a[b.lineNumber]){
a[b.lineNumber] = {
lineNumber: b.lineNumber,
cells: [b.cellwidth]
}
}
else{
a[b.lineNumber].cells.push(b.cellwidth);
}
return a;
}, []);
Надеюсь, это поможет!
Ответ №3:
Вы имеете в виду что-то подобное?
var cells = [
{
cellwidth: 15.552999999999999,
lineNumber: 1
},
{
cellwidth: 14,
lineNumber: 2
},
{
cellwidth: 14.552999999999999,
lineNumber: 2
},
{
cellwidth: 14,
lineNumber: 1
}
]
var totalCells = [];
for (var i = 0; i < cells.length; i ) {
var cell = cells[i];
if (!totalCells[cell.lineNumber]) {
// Add object to total cells
totalCells[cell.lineNumber] = {
lineNumber: cell.lineNumber,
cellWidth: []
}
}
// Add cell width to array
totalCells[cell.lineNumber].cellWidth.push(cell.cellwidth);
}