Нужно отформатировать массив объектов другим способом

вы можете нажать на тег ins, чтобы установить значение флажка, как указано ниже.

if !browser.checkbox(id: 'order_terms').set? then
   puts "not set"
   browser.element(class: 'iCheck-helper').click
end
puts browser.checkbox(id: 'order_terms').set? 
1
задан Jeto 20 January 2019 в 18:01
поделиться

2 ответа

Вы можете использовать reduce и Object.values следующим образом:

const matrixArray = [{Responded:1,RowName:'row1',ColName:'col1'},{Responded:2,RowName:'row1',ColName:'col2'},{Responded:0,RowName:'row1',ColName:'col3'},{Responded:0,RowName:'row2',ColName:'col1'},{Responded:0,RowName:'row2',ColName:'col2'},{Responded:1,RowName:'row2',ColName:'col3'},{Responded:1,RowName:'row3',ColName:'col1'},{Responded:0,RowName:'row3',ColName:'col2'},{Responded:1,RowName:'row3',ColName:'col3'}]

const merged = matrixArray.reduce((acc, {Responded,RowName,ColName}) => {
       acc[RowName] = acc[RowName] || {RowName};
       acc[RowName][ColName] = (acc[RowName][ColName] + Responded) || Responded;
       return acc;
   }, {});

const output = Object.values(merged);
console.log(output)
[ 1111]

Вот более короткая версия приведенного выше кода:

const matrix = [{Responded:1,RowName:'row1',ColName:'col1'},{Responded:2,RowName:'row1',ColName:'col2'},{Responded:0,RowName:'row1',ColName:'col3'},{Responded:0,RowName:'row2',ColName:'col1'},{Responded:0,RowName:'row2',ColName:'col2'},{Responded:1,RowName:'row2',ColName:'col3'},{Responded:1,RowName:'row3',ColName:'col1'},{Responded:0,RowName:'row3',ColName:'col2'},{Responded:1,RowName:'row3',ColName:'col3'}],
  
output = Object.values(matrix.reduce((a, {Responded,RowName,ColName}) => (
    (a[RowName] = a[RowName] || {RowName})[ColName] = Responded, a), {}));

console.log(output);

0
ответ дан adiga 20 January 2019 в 18:01
поделиться

Вы можете использовать Array.reduce и Object.values для получения желаемого результата:

const matrixArray = [
  {Responded: 1, RowName: 'row1', ColName: 'col1'},
  {Responded: 2, RowName: 'row1', ColName: 'col2'},
  {Responded: 0, RowName: 'row1', ColName: 'col3'},
  {Responded: 0, RowName: 'row2', ColName: 'col1'},
  {Responded: 0, RowName: 'row2', ColName: 'col2'},
  {Responded: 1, RowName: 'row2', ColName: 'col3'},
  {Responded: 1, RowName: 'row3', ColName: 'col1'},
  {Responded: 0, RowName: 'row3', ColName: 'col2'},
  {Responded: 1, RowName: 'row3', ColName: 'col3'}
];

const result = Object.values(matrixArray.reduce((result, entry) => {
  if (!(entry.RowName in result)) {
    result[entry.RowName] = {RowName: entry.RowName};
  }
  if (!(entry.ColName in result[entry.RowName])) {
    result[entry.RowName][entry.ColName] = 0;
  }
  result[entry.RowName][entry.ColName] += entry.Responded;
  return result;
}, {}));

console.log(result);
[1118 ]

Обратите внимание, что я не набирал переменные, чтобы сделать их работоспособными здесь, не стесняйтесь делать это, так как вы используете Typescript.

Объяснение:

  • Array.reduce зацикливается на массиве и создает карту RowName => {RowName, col1, col2, col3} (объект), увеличивая на соответствующую величину Responded на каждой итерации),
  • [1112 ] Object.values затем преобразует это обратно в массив.
0
ответ дан Jeto 20 January 2019 в 18:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: