为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Javascript根据条件更新键值

如何使用Javascript根据条件更新键值

白衣非少年 2022-10-13 17:20:30
我有一些对象值数组,我需要检查一些键值对并使用 Javascript 相应地更新对象。我在下面解释我的代码。\let arr =[  {    'id': 11,    'name':'Raj',    "code":0  },  {    'id': 11,    'name':'Raj',    'code': 1  },  {    'id':32,    'name':'Krishna',    'code':1  },  {    'id':32,    'name':'fff',    'code':0  },  {    'id':43,    'name':'FAQ',    'code':0  }]let arr1 = arr.map((item,i) => {  const found = arr.some(el => el.code === 1);  if(found) {      }}) 在这里,我有对象数组,如果任何记录都具有code=1,id那么我需要所有记录都code=1属于相同的id。我的预期输出将如下所示。let arr =[  {    'id': 11,    'name':'Raj',    "code":1  },  {    'id': 11,    'name':'Raj',    'code': 1  },  {    'id':32,    'name':'Krishna',    'code':1  },  {    'id':32,    'name':'fff',    'code':1  },  {    'id':43,    'name':'FAQ',    'code':0  }]这里对于 id=11 有一条记录的 code=1 所以所有记录都属于 id=11 的 code 值为 1;
查看完整描述

5 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

既然您已接受它作为答案。你的问题是错误的。我的解决方案只是检查 id 是否具有code除此之外的一些值,0它将适用于 that 的所有对象id。


var arr =[ { 'id': 11, 'name':'Raj', "code":0 }, { 'id': 11, 'name':'Raj', 'code': 1 }, { 'id':32, 'name':'Krishna', 'code':1 }, { 'id':32, 'name':'fff', 'code':0 }, { 'id':43, 'name':'FAQ', 'code':0 }];


var result = arr.map((k,i,self)=>({...k, code:self.find(p=>p.id==k.id && p.code != 0)?.code || k.code}));


console.log(result);


查看完整回答
反对 回复 2022-10-13
?
慕慕森

TA贡献1856条经验 获得超17个赞

我认为您想要的是首先再次在列表中进行过滤,以查找是否有任何具有相同 id 且代码 === 1 的项目。


这可以通过多种方式完成。下面是一个例子


let arr = [{

    'id': 11,

    'name': 'Raj',

    "code": 0

  },

  {

    'id': 11,

    'name': 'Raj',

    'code': 1

  },

  {

    'id': 32,

    'name': 'Krishna',

    'code': 1

  },

  {

    'id': 32,

    'name': 'fff',

    'code': 0

  },

  {

    'id': 43,

    'name': 'FAQ',

    'code': 0

  }

]


let arr1 = arr.map((item, i) => {

  const currentId = item.id;

  const itemsWithSameId = arr.filter(el => el.id === currentId);

  const found = itemsWithSameId.some(el => el.code === 1);

  if (found) {

    return { ...item, code: 1};

  }

  return item;

})


console.log(arr1);


查看完整回答
反对 回复 2022-10-13
?
茅侃侃

TA贡献1842条经验 获得超21个赞

const arr = [{

  id: 11,

  name: 'Raj',

  code: 0

}, {

  id: 11,

  name: 'Raj',

  code: 1

}, {

  id: 32,

  name: 'Krishna',

  code: 1

}, {

  id: 32,

  name: 'fff',

  code: 0

}, {

  id: 43,

  name: 'FAQ',

  code: 0

}]


const update = (id, code) => {

  const updatedArr = arr.map(el => {

    if (el.id === id) el.code = code

    return el

  })

  return updatedArr

}


const result = update(11, 1)


console.log(result)


查看完整回答
反对 回复 2022-10-13
?
精慕HU

TA贡献1845条经验 获得超8个赞

我会根据他们的 id 对项目进行分组。然后过滤掉至少一个项目的代码为 1 的所有组。然后将这些组中所有项目的代码设置为 1。


function groupBy(iterable, fn) {

  const groups = new Map();

  for (const item of iterable) {

    const key = fn(item);

    if (!groups.has(key)) groups.set(key, []);

    groups.get(key).push(item);

  }

  return groups;

}


let arr =[

  { id: 11, name: 'Raj',     code: 0 },

  { id: 11, name: 'Raj',     code: 1 },

  { id: 32, name: 'Krishna', code: 1 },

  { id: 32, name: 'fff',     code: 0 },

  { id: 43, name: 'FAQ',     code: 0 }

];


Array.from(groupBy(arr, item => item.id).values())

     .filter(group => group.some(item => item.code == 1))

     .flat(1)

     .forEach(item => item.code = 1);


console.log(arr);


查看完整回答
反对 回复 2022-10-13
?
四季花海

TA贡献1811条经验 获得超5个赞

let arr = [{

    'id': 11,

    'name': 'Raj',

    "code": 0

  },

  {

    'id': 11,

    'name': 'Raj',

    'code': 1

  },

  {

    'id': 32,

    'name': 'Krishna',

    'code': 1

  },

  {

    'id': 32,

    'name': 'fff',

    'code': 0

  },

  {

    'id': 43,

    'name': 'FAQ',

    'code': 0

  }

]


const foundItems = arr.filter(el => el.code === 1);


arr.forEach(el => {

  if (foundItems.find(e => e.id === el.id)) {

    el.code = 1;

  }

});


console.log(arr);


查看完整回答
反对 回复 2022-10-13
  • 5 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信