如何使用javascript覆盖现有对象

时间:2019-03-26 01:44:18

标签: javascript jquery arrays object

我想知道如何在对象中添加现有的匹配值并在javascript中添加剩余的值 例如,我需要将merge_obj与ID为'1'的my_obj匹配,匹配值targetAmount仅替换,其余属性需要添加

我尝试了

var filtervalue = my_obj.filter((e)=>e.id == "1").map((e)=>Object.assign({},e[0], merge_obj));

const merge_obj = {
  targetAmount: 50688.97,
  type: "REGULAR"
}

const my_obj = [
  {
    id: "1",
    logo: "img1.png",
    name: "fund",
    speed: "1 Days",
    targetAmount: "2000"
  },
  {
    id: "2",
    logo: "img2.png",
    name: "transfer",
    speed: "1 Days",
    targetAmount: "3000"
  },
]


Expected Output:
var my_obj = [
{
    id: "1",
    logo: "img1.png",
    name: "fund",
    speed: "1 Days",
    targetAmount: 50688.97,
    type: "REGULAR",
  },
  {
    id: "2",
    logo: "img2.png",
    name: "transfer",
    speed: "1 Days",
    targetAmount: "3000",
  },
]

4 个答案:

答案 0 :(得分:2)

这可以通过使用数组映射方法来遍历对象数组,检查id是否等于“ 1”,然后使用ES6的spread syntax“合并”对象来实现。

const result = my_obj.map(obj => {
  if (obj['id'] === '1') {
    return {...obj, ...merge_obj}
  } else {
    return obj;
  }
})

console.log(result)

此外,只是一个快速建议,请尝试使用constlet而不是var

答案 1 :(得分:0)

只需通过选中id合并第一个:

var my_obj = [{
    id: "1",
    logo: "img1.png",
    name: "fund",
    speed: "1 Days",
    targetAmount: "2000"
  },
  {
    id: "2",
    logo: "img2.png",
    name: "transfer",
    speed: "1 Days",
    targetAmount: "3000"
  },
]

var merge_obj = {
  targetAmount: 50688.97,
  type: "REGULAR"
};

var new_obj = my_obj.map(e => {
  if (e.id == "1") {
    Object.keys(merge_obj).forEach(key => e[key] = merge_obj[key]);
  }
  return e;
});
console.log(new_obj);
.as-console-wrapper { max-height: 100% !important; top: auto; }

答案 2 :(得分:0)

如果您想对原始变量进行变异,只需遍历数组并直接分配

var my_obj = [{
    id: "1",
    logo: "img1.png",
    name: "fund",
    speed: "1 Days",
    targetAmount: "2000"
  },
  {
    id: "2",
    logo: "img2.png",
    name: "transfer",
    speed: "1 Days",
    targetAmount: "3000"
  },
]

var merge_obj = {
  targetAmount: 50688.97,
  type: "REGULAR"
};

my_obj.forEach(e=> {if(e.id==='1') Object.assign(e, merge_obj)})

console.log(my_obj)

答案 3 :(得分:0)

仅将映射功能中的对象访问器从e[0]更改为e,然后检查是否可行。 即

var filtervalue = myList.filter((e)=>e.id == "1").map((e)=>Object.assign({}, e, merge_obj));

此外,您需要正确检查变量名是my_obj还是myList

相关问题