【问题标题】:Multiply Array Elements javascript将数组元素相乘
【发布时间】:2021-08-31 13:33:55
【问题描述】:

我有一个数字数组: var arr = [1,2,3,4,5] 我想得到一个这样的列表: input_1 = 1, input_2 = input_1 * 2, input_3= input_2 * 4 .. 我可以用 javascript 做吗?

【问题讨论】:

  • 您是要"variable" variables 还是只是如何将这个数组转换成另一个数组?
  • 如果您想要动态地为数组中的每个元素创建一个变量,那么如果没有 eval 或类似的东西,这是不可能的。
  • 您可以使用 Object.defineProperty 进行简单的 for 循环,如下面的伪代码所示。 function creareVariables (array){ let parent =this;array.forEach((el,idx)=>{if(!idx){Object.defineProperty(parent,'input_'+idx, {value:el})} else{ Object.defineProperty(parent, 'input_'+idx,{value:parent['input_'+(idx-1)]*el})}})} 警告未经测试的代码.. 从手机发送
  • 您有尝试过的初始方法吗?

标签: javascript arrays list multiplication


【解决方案1】:

试试

var output = {};

arr.forEach((item, i) => {
    output[i+1] = i === 0 ? 1 : (output[i] * (i * 2));
});

输出

{1: 1, 2: 2, 3: 8, 4: 48, 5: 384}

【讨论】:

    【解决方案2】:

    您只需要跟踪最后计算的值并将其乘以当前元素。有很多不同的方法可以做到这一点,这里是一种:

    var arr = [1,2,3,4,5];
    
    let last = 1;
    const output = arr.map(el => last *= el);
    console.log(output);

    【讨论】:

      【解决方案3】:

      这是一个使用reduce 方法(Doc)的更类似于函数的实现。

      var arr = [1,2,3,4,5];
      
      const result = arr.reduce(
        (resultArr, _, i) => {
          if (i === 0) {
            // base case:
            return [1];
          } else {
            // step case:
            return [
              ...resultArr,
              resultArr[resultArr.length - 1] * (2 ** i),
            ];
          }
        },
        [],
      );
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-28
        • 1970-01-01
        • 2021-12-10
        • 2020-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多