функция make принимает несколько переменных из массива, переданного в качестве параметра - PullRequest
0 голосов
/ 30 мая 2018

Как заставить функцию принимать несколько переменных из массива, переданного в качестве параметра?

Отредактировано

Например:

Достичь этого:

const inputObj = [
 ['Anna', 10, 'Monday'],
 ['Anna', 15, 'Wednesday'],
 ['Beatrice', 8, 'Monday'],
 ['Beatrice', 11, 'Wednesday'],
 ['Anna', 4, 'Wednesday'],
 ['Beatrice', 5, 'Monday'],
 ['Beatrice', 16, 'Monday']
]
// expected output:
const outputObj = [ 
[ 'Anna', 10, 'Monday' ],
  [ 'Anna', 19, 'Wednesday' ],
  [ 'Beatrice', 29, 'Monday' ],
  [ 'Beatrice', 11, 'Wednesday' ] 
]

const arr = [0, 2]

const someFunction = (obj, v, a) => {
    const result = obj.reduce((acc, cur) => {
        const key = `${cur[a[0]]}|${cur[a[1]]}`
        if(!acc[key]) acc[key] = cur
        else acc[key][1] += cur[v]
        return acc
      }, {})
    return Object.values(result)
}


console.log(someFunction(inputObj, 1, arr))

с этим:

const arr = [0, 2, 3, ...] // basically the array could contain any number of items.

const someFunction = (obj, v, objParams) => {
      const result = obj.reduce((acc, cur) => {
      const key = ??? 
      ...
      }, {})
}

Чтобы функцию можно было повторно использовать и она принимала массивы нестандартного размера, проверьте, совпадают ли номера столбцов в массиве, затем добавляетсумма столбца, который передается как v?

Как объявить переменные из objParams для достижения того же результата, что и код выше?

Также, как добавить v в середине cur?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

С ES6 вы можете использовать оператор распространения в определении аргумента.

Подробнее об операторе распространения на MDN

function sum(...args) {
  return args.reduce((result, value) => result + value, 0)
}

const numbers = [1, 2, 3];

console.log('sum', sum(2, 2));
console.log('sum', sum(...numbers));
console.log('sum', sum(1, 2, 1, ...numbers));

// get single args before accumulating the rest
function sum2(foo, bar, ...args) {
  return args.reduce((result, value) => result + value, 0)
}

console.log('sum2', sum2(2, 2));
console.log('sum2', sum2(...numbers));
console.log('sum2', sum2(1, 2, 1, ...numbers));
0 голосов
/ 30 мая 2018

Предполагая, что objParams является массивом неизвестного размера (в данном примере это строки):

const objParams = ["c1", "c2", "c3"];
const key = objParams.join(']}|${cur[');
const built = '${cur[' + key + ']';

Построен:

${cur[c1]}|${cur[c2]}|${cur[c3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...