代码之家  ›  专栏  ›  技术社区  ›  Leo Messi

将对象数组的每个元素乘以一个标量

  •  2
  • Leo Messi  · 技术社区  · 6 年前

    我有一个对象数组,每个对象也包含一些数组。

    例如,我想知道如何轻松地访问这些值,使它们乘以一个常量。

    可能有必要 forEach() 我试着这样做:

    myArray = [{
        income: [1, 2, 3],
        outcome: [2, 3]
      },
      {
        income: [1, 9, 8, 5],
        outcome: [1, 3, 7]
      },
      {
        income: [7, 2, 8],
        outcome: [2, 6, 10]
      },
    ];
    
    const myValue = 2;
    myArray.forEach(ob => ob.income = ob.income * myValue, ob.outcome = ob.outcome * myValue);

    在这种情况下,预期结果应该是:

    myArray = [
      {income: [2, 4, 6], outcome: [4, 6]},
      {income: [2, 18, 16, 10], outcome: [2, 6, 14]},
      {income: [14, 4, 16], outcome: [4, 12, 20]},
    ];
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   amrender singh    6 年前

    你可以简单地使用 forEach() 迭代所有对象,然后使用 Array.map() 以获得所需的结果。

    let myArray = [
                {income: [1, 2, 3], outcome: [2, 3]},
                {income: [1, 9, 8, 5], outcome: [1, 3, 7]},
                {income: [7, 2, 8], outcome: [2, 6, 10]},
    ];
    
    const multiplyBy = 2;
    
    myArray.forEach((obj)=>{
      obj.income = obj.income.map((a)=> a*multiplyBy);
      obj.outcome = obj.outcome.map((a)=> a*multiplyBy);
    });
    
    console.log(myArray);
        2
  •  1
  •   Nina Scholz    6 年前

    可以获取所有属性并为新对象映射新属性。

    var array = [{ income: [1, 2, 3], outcome: [2, 3] }, { income: [1, 9, 8, 5], outcome: [1, 3, 7] }, { income: [7, 2, 8], outcome: [2, 6, 10] }],
        factor = 2,
        result = array.map(o => 
            Object.assign(...Object.entries(o).map(([k, v]) =>
                ({ [k]: v.map(f => f * factor) }))));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    改变原始数组

    var array = [{ income: [1, 2, 3], outcome: [2, 3] }, { income: [1, 9, 8, 5], outcome: [1, 3, 7] }, { income: [7, 2, 8], outcome: [2, 6, 10] }],
        factor = 2;
    
    array.forEach(o => 
        Object
            .entries(o)
            .forEach(([k, v]) => o[k] = v.map(f => f * factor))
    );
    
    console.log(array);
    .作为控制台包装最大高度:100%!重要;顶部:0;