0

我有一些对象值数组,我需要检查一些键值对并使用 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=1id那么我需要所有记录都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;

4

6 回答 6

1

我认为您想要的是首先再次在列表中进行过滤,以查找是否有任何具有相同 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);

于 2020-06-22T11:03:44.087 回答
1

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)

于 2020-06-22T11:03:47.677 回答
1

既然您已接受它作为答案。你的问题是错误的。我的解决方案只是检查 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);

于 2020-06-22T11:05:05.767 回答
0

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);

于 2020-06-22T11:10:44.620 回答
0

我会根据他们的 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);

于 2020-06-22T11:20:55.763 回答
0

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
  }
]

   arr.forEach(el => {  if(el.code === 1){
   arr.map((obj)=>{
if(obj.id==el.id){
   obj.code=1
}
    })
  }})
 




console.log(arr)

解决了

于 2020-06-22T11:19:42.687 回答