js 选出数组未选中的元素?

代码如下

let arr = ['2', '3', '4'];
let list = [
  { value: '1', disable: false },
  { value: '2', disable: false },
  { value: '3', disable: false },
  { value: '4', disable: false },
  { value: '5', disable: false },
  { value: '6', disable: false },
]

// 这种是list数组中含有arr数组选中的元素修改为true

list.forEach((item, i) => {
  arr.forEach((element) => {
    if (item.value === element) {
      list[i].disable = true
    }
  })
})
//结果是:
 [
  { value: '1', disable: false },
  { value: '2', disable: true },
  { value: '3', disable: true },
  { value: '4', disable: true },
  { value: '5', disable: false },
  { value: '6', disable: false },
]

如果把未选中的数据修改为true, 结果
[
  { value: '1', disable: true },
  { value: '2', disable: false },
  { value: '3', disable: false },
  { value: '4', disable: false },
  { value: '5', disable: true },
  { value: '6', disable: true },
]

刚才那个代码循环好像没法实现.
阅读 1.7k
2 个回答

list.forEach((item) => {
item.disable = arr.includes(item.value); // or === false
})

p.s. 这是一点基础没有吗?。。

你需要的是先构建一个 map

let arr = ['2', '3', '4'];
let list = [
  { value: '1', disable: false },
  { value: '2', disable: false },
  { value: '3', disable: false },
  { value: '4', disable: false },
  { value: '5', disable: false },
  { value: '6', disable: false },
]
let map = {}
for (let v of arr) {
    map[v] = true
}

list.forEach((item, i) => {
  if (!map.hasOwnProperty(item.value)) {
    list[i].disable = true
  }
})


# 前面的 “list数组中含有arr数组选中的元素修改为true”
# 那种写法从时间复杂度上来讲 O(n^2),最好也改一下,改成
list.forEach((item, i) => {
  if (map.hasOwnProperty(item.value)) {
    list[i].disable = true
  }
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏