js 数组对象问题比较,添加数组对象添加新属性

let a = ['1', '2']
let b = [{
    label: "选项1"
    value: "1"
},{
    label: "选项2"
    value: "2"
},{
    label: "选项3"
    value: "3"
}]

需求是比较a数组和b数组,如果a数组的值等于b数组的value值,给b数组的每一个对象添加一个新属性disabled,如果相等就为true,不相等就为false

阅读 4k
6 个回答

场景应该类似多选,a为选中数组,b为下拉选项的数组,然后下拉选项中选中项目进行特殊处理。

b.map(e=>({...e,disabled:a.includes(e.value)}))

一个不完整的处理方法,因为值需要修改b的元素,所以以b元素数量作为计数,a元素数量为参考。

aL=a.length
for (i=0;i<b.length;i++){
    if (i<aL){
        b[i]["disabled"]= (a[i] == b[i]["value"] );
    }else{
        b[i]["disabled"]=false;
    }
let a = ['1', '2'];
let b = [{
    label: "选项1",
    value: "1"
},{
    label: "选项2",
    value: "2"
},{
    label: "选项3",
    value: "3"
}]

b.map((item,index)=>{
    if(item.value == a[index]){
        item["disabled"] = true;
    }else {
        item["disabled"] = false;
    }
})
b.forEach((item, index, arr) => (arr[index].disabled = !!a.find((i) => i === item.value)))

如果说只要在 a 中找到了 b 中某个元素的 .value,就给这个元素加上 disabled = true 属性。那么,只需要遍历 b 的每个元素,然后拿到 valuea 中查找,根据结果给它加 .disabled

b.forEach(it => { // 对 b 进行遍历
    it.disabled = a.includes(it.value);  // 这个用 includes 查找就可以
});

如果不是这么简单的查找,而是要一对一的比较,那就需要使用元素的 index

b.forEach((it, i) => {
    it.disabled = a[i] === it.value;
});
建议参阅
     function Compare(array1,array2,disabled='disabled'){
          let arr = array2.length
          let bol = false

            array2.forEach((item,index) =>{    
                 for(let i=0 ;i<arr;i++){
                   if(array1[i]==item.value){ bol = true; break} else{ bol = false }   
                 }
                 bol ? item[disabled]=true : item[disabled]=false;
             } )
             return  array2
     }
    console.log(Compare(a,b))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏