如何用Javascript从数组对象提取ID并判断元素是否存在
嘿,这事儿其实挺简单的,我给你几种实用的方案,你可以根据自己的需求来选:
第一步:提取数组中所有对象的id
如果你想先把所有已存在的id收集起来,可以用JavaScript的map()方法,它能快速遍历数组并提取每个对象的id:
const array = [ { active: false, defaultTag:true, id: '507f191e810c19729de860ea', title: 'one' }, { active: false, defaultTag:true, id: '507f191e810c19722de860ea', title: 'two' } ]; // 把所有id提取到一个新数组里 const existingIds = array.map(item => item.id); console.log(existingIds); // 输出结果: ['507f191e810c19729de860ea', '507f191e810c19722de860ea']
第二步:检查新元素是否已存在
有了id数组之后,就可以用includes()方法快速判断新对象的id是否已经存在:
// 假设这是用户要保存的新对象 const newItem = { active: true, defaultTag: false, id: '507f191e810c19729de860ea', title: 'one' }; if (existingIds.includes(newItem.id)) { console.log('这个元素已经存在啦,不用重复保存哦!'); } else { // 如果不存在,就把新对象添加到原数组里 array.push(newItem); }
更高效的方式:不用提前提取id
其实你也可以直接用some()方法,它会遍历数组,只要找到第一个匹配的元素就停止,比先提取id再检查更高效:
const newItem = { active: true, defaultTag: false, id: '507f191e810c19729de860ea', title: 'one' }; // 检查数组里是否已有相同id的元素 const isItemExists = array.some(item => item.id === newItem.id); if (isItemExists) { console.log('该元素已存在,无需重复保存'); } else { array.push(newItem); }
额外补充:如果需要更新已存在的元素
要是你不仅想检查是否存在,还想在存在时更新这个元素的内容,可以用findIndex()方法:
const updatedItem = { active: true, defaultTag: false, id: '507f191e810c19729de860ea', title: 'updated one' }; // 找到匹配元素的索引 const itemIndex = array.findIndex(item => item.id === updatedItem.id); if (itemIndex !== -1) { // 元素存在,更新它(用扩展运算符合并新旧属性) array[itemIndex] = { ...array[itemIndex], ...updatedItem }; } else { // 元素不存在,添加到数组里 array.push(updatedItem); }
内容的提问来源于stack exchange,提问作者Americo Perez
相关产品推荐
相关产品推荐

