JS 更新数组 里面对象相同的ID的内容

发布于 2022-09-12 04:17:19 字数 475 浏览 8 评论 0

let arr=[ ]
第一次push一个对象 {id:1, text:'11111'}
第二次push一个对象 {id:2, text:'22222'}
此时 let arr=[

{id:1, text:'11111'},
{id:2, text:'22222'}

]

第三次push对象{id:1,text:'33333'}
第三次替换 数组里面ID相同的对象
此时 let arr=[

{id:1, text:'33333'},
{id:2, text:'22222'}

]

同理 第四次push对象 {id:2,text:'44444'}
此时 let arr=[

{id:1, text:'33333'},
{id:2, text:'44444'}

]
请问下 有什么犀利的方法

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

她比我温柔 2022-09-19 04:17:19
const foo = (item, arr) => {
  let targetIndex = arr.findIndex((obj) => obj.id === item.id);
  if (targetIndex === -1) {
    targetIndex = arr.length;
  }

  arr.splice(targetIndex, 1, item);
};

暂时没想到什么犀利的办法。

要不就把这个办法写到 prototype 上?

Array.prototype.uniquePush = function (item) {
  let targetIndex = this.findIndex((obj) => obj.id === item.id);
  if (targetIndex === -1) {
    targetIndex = this.length;
  }

  this.splice(targetIndex, 1, item);
};

// 测试
> const arr = [];
< undefined
> arr.uniquePush({ id: 1, text: '111' });
< undefined
> arr
< [{…}]
  0: {id: 1, text: "111"}
> arr.uniquePush({ id: 2, text: '222' });
< undefined
> arr
< (2) [{…}, {…}]
  0: {id: 1, text: "111"}
  1: {id: 2, text: "222"}
> arr.uniquePush({ id: 1, text: '333' });
< undefined
> arr
< (2) [{…}, {…}]
  0: {id: 1, text: "333"}
  1: {id: 2, text: "222"}
感情废物 2022-09-19 04:17:19
function optFunc(arr,obj){
    arr.every(v => {return v.id === obj.id?(v.text = obj.text)&&false:true})&&arr.push(obj)
}
画离情绘悲伤 2022-09-19 04:17:19
// 思路是:先过滤掉已有id的元素,再push元素进数组
// arr 旧列表,item 要push进去的元素
let newArr = arr.filter(every => every.id !== item.id)
newArr.push(item)
╄→承喏 2022-09-19 04:17:19
Object.assign([], [{id: 1, text: '11111'}, {id: 222, text: 'sdasd'}], [{id: 1, text:'3333'}])```
何其悲哀 2022-09-19 04:17:19

上一个 lodash 犀利版本吧 如果考虑用 lodash 的话~~

  const foo = (arr, item) => _.uniqBy(_.reverse(arr.concat(item)), 'id');
善良天后 2022-09-19 04:17:19

建议把arr换成obj,
第一次push一个对象 {id:1, text:'11111'}

{
    '1': {id:1, text:'11111'}
}

第二次push一个对象 {id:1, text:'22222'}

obj['1'].text = '22222';

最后直接拿Object.values(obj)就行,不要再array一棵树上吊死

煮茶煮酒煮时光 2022-09-19 04:17:19

这个明显用对象来组织比用数组来处理,逻辑上更方便。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文