Как объединить массив в javascript

#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);
}