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

js查找对象数组元素中的key,如果有则替换,没有则添加

js查找对象数组元素中的key,如果有则替换,没有则添加

慕田峪4524236 2019-03-01 14:13:21
现在有一数组,我需要判断里面是否有我当前的questionId,如果有则用一个js对象替换,没有则直接添加。我想用for循环的方式来查找,但是总会被添加好多次,请大家帮忙看下:即:用temp里面的questionId和data里面的questionId进行比较,如果data里面有这个questionId,则用temp里面的answer替换相应的answer,如果data里面没有这个questionId,则直接添加temp数据到data。问题:我用for循环遍历的时候,总会重复添加数据,就是说每次都会重复遍历数据。
查看完整描述

2 回答

?
DIEA

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

题主可能是逻辑弄晕了,你看对不对


// 已经有答案则判断是否该题答案

let isExist = false;

for (let i in answers) {

    let questionId = answers[i].questionId;

    if (id === questionId) {

        isExist = true;

        break;

    }

}

if (isExist) {

    // 如果存在答案则替换原答案

    this.$store.commit('delIndex', i);

    this.$store.commit('addAnswer', data);

    console.log('我要替换原来答案', data);

} else {

    // 否则直接提交

    this.$store.commit('addAnswer', data);

    console.log('初次提交答案', data);

}

前面的 for 循环优化下:


let isExist=answers.some((val,index)=>{

    return id===val[index].questionId;

});


查看完整回答
反对 回复 2019-03-07
?
陪伴而非守候

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

MDN官网有这么一段话

https://img1.sycdn.imooc.com//5c80c8ff00017db406910202.jpg

所以for...in在这里并不可靠
此处在循环前保存一个length,用下标遍历就好了

查看完整回答
反对 回复 2019-03-07
  • 2 回答
  • 0 关注
  • 3892 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号