【问题标题】:make function take multiple variables from an array passed in as parameter使函数从作为参数传入的数组中获取多个变量
【发布时间】:2018-11-08 17:17:24
【问题描述】:

如何让函数从作为参数传入的数组中获取多个变量?

编辑

例如:

实现这一目标:

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 中声明变量以达到与上面代码相​​同的结果?

还有如何在cur中间加上v

【问题讨论】:

  • const key = objParams.join('|') 似乎是你想要的

标签: javascript arrays function parameters


【解决方案1】:

在 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));

【讨论】:

    【解决方案2】:

    假设 objParams 是一个未知大小的数组(本例中为字符串):

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

    内置:

    ${cur[c1]}|${cur[c2]}|${cur[c3]
    

    【讨论】:

    • 其实这样不行。它返回正确的键,但该键不起作用。试试 console.log(key),它将键本身作为字符串返回,而不是键的值。
    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2015-09-28
    • 2016-04-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多