更新对象数组的另一种方法是什么?

时间:2019-01-18 16:18:52

标签: javascript

我有一组对象。我想使用object更新一个id

我可以使用map函数。是否有其他方法或更有效的方式来更新阵列?

这是我的代码: https://stackblitz.com/edit/js-xgfwdw?file=index.js

var id = 3
var obj = {
  name: "test"
}
let arr = [{
  name: "dd",
  id: 1
}, {
  name: "dzxcd",
  id: 3
}, {
  name: "nav",
  id: 5
}, {
  name: "hhh",
  id: 4
}]

function getUpdated(obj, id) {
  var item = [...arr];
  const t = item.map((i) => {
    if(i.id==id){
      return {
        ...obj,
        id
      }
    }else {
      return i;
    }
  })
  return t
}

console.log(getUpdated(obj,id))

期望的输出是正确的,但我想使用其他方法来实现相同的功能。

[{
      name: "dd",
      id: 1
    }, {
      name: "test",
      id: 3
    }, {
      name: "nav",
      id: 5
    }, {
      name: "hhh",
      id: 4
    }]

4 个答案:

答案 0 :(得分:4)

您使用的是正确的方法,基本上,您所做的坏事是在map已经给您一个新数组的情况下创建新数组[...arr]

要使用的其他东西,可能是三元运算符,并直接返回map函数的结果

在此处检查improvedGetUpdate

var id = 3;

var obj = {
  name: "test"
};

let arr = [{
  name: "dd",
  id: 1
}, {
  name: "dzxcd",
  id: 3
}, {
  name: "nav",
  id: 5
}, {
  name: "hhh",
  id: 4
}]

function getUpdated(obj, id) {
  var item = [...arr];
  const t = item.map((i) => {
    if (i.id == id) {
      return {
        ...obj,
        id
      }
    } else {
      return i;
    }
  })
  return t
}

improvedGetUpdate = (obj, id) => arr.map(i => {
  return i.id !== id ? i : {
    ...obj,
    id
  }
})

console.log(getUpdated(obj, id))
console.log(improvedGetUpdate(obj, id))

答案 1 :(得分:2)

var id = 3
var obj = {
  name: "test"
}
let arr = [{
  name: "dd",
  id: 1
}, {
  name: "dzxcd",
  id: 3
}, {
  name: "nav",
  id: 5
}, {
  name: "hhh",
  id: 4
}]

const result = arr.map((el) => el.id === id ? {...obj, id} : el)

console.log(result);

答案 2 :(得分:1)

使用splice方法也可用于更新数组:

var obj = {
  id: 3,
  name: "test"
}
let arr = [{
  name: "dd",
  id: 1
}, {
  name: "dzxcd",
  id: 3
}, {
  name: "nav",
  id: 5
}, {
  name: "hhh",
  id: 4
}]

arr.splice(arr.findIndex(({id}) => id === obj.id), 0, obj);
console.log(arr);

答案 3 :(得分:0)

@quirimmo建议使用短代码。 我建议使用快速代码。

var id = 3;
var obj = {
  id:   3,
  name: "test"
}
let arr = [{
  name: "dd",
  id: 1
}, {
  name: "dzxcd",
  id: 3
}, {
  name: "nav",
  id: 5
}, {
  name: "hhh",
  id: 4
}]
var arr2 = [...arr];
console.time('⏱');
arr.splice(arr.findIndex(({id}) => id === obj.id), 0, obj);
console.timeEnd('⏱');
console.time('⏱');
for (let item of arr2) {
  if (item.id === id) {
    item.name = obj.name;
    break;
  }
}
console.timeEnd('⏱');
console.log(arr2);