Javascript 如何将新数据合并到旧阵列?

Javascript 如何将新数据合并到旧阵列?,javascript,jquery,Javascript,Jquery,我有一个这样的数组。这里我只包含了5个字段,但实际上我有大约45个字段名 0: {id:1, product_name: 'aaa', val1:1, val2:2, val3:4} 1: {id:2, product_name: 'bbb', val1:1, val2:2, val3:4} 2: {id:3, product_name: 'ccc', val1:1, val2:2, val3:4} 3: {id:4, product_name: 'ddd', val1:1, val2:2, v

我有一个这样的数组。这里我只包含了5个字段,但实际上我有大约45个字段名

0: {id:1, product_name: 'aaa', val1:1, val2:2, val3:4}
1: {id:2, product_name: 'bbb', val1:1, val2:2, val3:4}
2: {id:3, product_name: 'ccc', val1:1, val2:2, val3:4}
3: {id:4, product_name: 'ddd', val1:1, val2:2, val3:4}
我想得到val1、val2和val3的和,并显示在total列中,并将“%”符号附加到这3个值上

我做了以下操作以获得总和并附加%

temp = temp.map((row) => {
    const newRow= {};
    let total = 0;

    total = row['val1'] +
            row['val2'] +
            row['val3'] +

    newRow['total'] = total;

    newRow['val1'] = row['val1'] + '%';
    newRow['val2'] = row['val2'] + '%';
    newRow['val3']   = row['val3'] + '%';

    return newRow;
});

使用此代码,我只返回数组中的val1、val2和val3。如何附加其他42列并获得最终结果。

您可以获取所需键的数组,并为单个数组映射新属性

var data=[{id:1,产品名称:'aaa',val1:1,val2:2,val3:4},{id:2,产品名称:'bbb',val1:1,val2:2,val3:4},{id:3,产品名称:'ccc',val1:1,val2:2,val3:4},{id:4,产品名称:'ddd',val1:1,val2:2,val3:4}],
键=['val1','val2','val3'],
结果=data.map(o=>Object.assign(…keys.map(
(t=>k=>({total:t+=o[k],[k]:o[k]+'%}))
(0)
)));
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
您可以获取所需密钥的数组,并为单个数组映射新属性

var data=[{id:1,产品名称:'aaa',val1:1,val2:2,val3:4},{id:2,产品名称:'bbb',val1:1,val2:2,val3:4},{id:3,产品名称:'ccc',val1:1,val2:2,val3:4},{id:4,产品名称:'ddd',val1:1,val2:2,val3:4}],
键=['val1','val2','val3'],
结果=data.map(o=>Object.assign(…keys.map(
(t=>k=>({total:t+=o[k],[k]:o[k]+'%}))
(0)
)));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您需要将const newRow的定义更改为:

let temp = this.some.map((row) => {
  const newRow = {...row};
  let total = 0;
  total = row['val1'] +
          row['val2'] +
          row['val3'];
  newRow['total'] = total;

  newRow['val1'] = row['val1'] + '%';
  newRow['val2'] = row['val2'] + '%';
  newRow['val3'] = row['val3'] + '%';

  return newRow;
});

您需要将const newRow的定义更改为:

let temp = this.some.map((row) => {
  const newRow = {...row};
  let total = 0;
  total = row['val1'] +
          row['val2'] +
          row['val3'];
  newRow['total'] = total;

  newRow['val1'] = row['val1'] + '%';
  newRow['val2'] = row['val2'] + '%';
  newRow['val3'] = row['val3'] + '%';

  return newRow;
});
你可以这样做

var-temp=[{id:1,产品名称:'aaa',val1:1,val2:2,val3:4},
{id:2,产品名称:'bbb',val1:1,val2:2,val3:4},
{id:3,产品名称:'ccc',val1:1,val2:2,val3:4},
{id:4,产品名称:'ddd',val1:1,val2:2,val3:4}];
临时=临时映射(行=>{
const newRow=行;
设total=0;
总计=parseInt(第['val1'行])+
parseInt(第['val2'行])+
parseInt(第['val3'行]);
newRow['total']=总计;
新行['val1']=行['val1']+'%';
新行['val2']=行['val2']+'%';
新行['val3']=行['val3']+'%';
返回新行;
});
$(“#结果”).append(JSON.stringify(temp)+“

你可以这样做

var-temp=[{id:1,产品名称:'aaa',val1:1,val2:2,val3:4},
{id:2,产品名称:'bbb',val1:1,val2:2,val3:4},
{id:3,产品名称:'ccc',val1:1,val2:2,val3:4},
{id:4,产品名称:'ddd',val1:1,val2:2,val3:4}];
临时=临时映射(行=>{
const newRow=行;
设total=0;
总计=parseInt(第['val1'行])+
parseInt(第['val2'行])+
parseInt(第['val3'行]);
newRow['total']=总计;
新行['val1']=行['val1']+'%';
新行['val2']=行['val2']+'%';
新行['val3']=行['val3']+'%';
返回新行;
});
$(“#结果”).append(JSON.stringify(temp)+“


你可以使用
reduce()
@CodeManiac你能给我看看吗?@产品名称输出看起来怎么样?它是数组还是字符串concatenated@codemaniac这是一个数组你可以使用
reduce()
@CodeManiac你能给我看看吗?@产品名称输出看起来怎么样?它是数组还是字符串concatenated@codemaniac这是一个arraylater,在上面的例子中,我也需要显示id和产品名称。
Object.assign({},o,…keys.map
将包含原始道具,而不改变原始道具。稍后,在上面的例子中,我也需要显示id和产品名称。
Object.assign({},o,…keys.map
将包含原始道具,而不改变原始道具。