вы можете нажать на тег 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?
Вы можете использовать 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)
Вот более короткая версия приведенного выше кода:
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);
Вы можете использовать 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
на каждой итерации), Object.values
затем преобразует это обратно в массив.