let arrA = [{id:1,name:'a'},{id:2,name:'保留'}] let arrB = [{id:3,name:'c'},{id:2,name:'b'}],如何提取出[{id:2,name:'保留'},{id:3,name:'c'}]
时间: 2024-10-25 10:05:32 浏览: 15
在JavaScript中,你可以使用数组的`filter()`方法和`findIndex()`方法来过滤并提取满足条件的对象。假设你想从两个数组(arrA和arrB)中只取name字段为'保留'或'name'存在但id相同的对象,可以这样做:
```javascript
let arrA = [{id:1, name: 'a'}, {id:2, name: '保留'}];
let arrB = [{id:3, name: 'c'}, {id:2, name: 'b'}];
let result = arrA.concat(arrB)
.filter(item => item.name === '保留' || (item.id && arrA.findIndex(obj => obj.id === item.id) !== -1));
console.log(result); // 输出:[{id:2, name: '保留'},{id:3, name: 'c'}]
```
这里首先将两个数组合并,然后通过`filter()`遍历每个元素,如果name属性值等于'保留',或者id存在于arrA中(`findIndex()`返回非-1),则保留该对象。
相关问题
local arra = { {0, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 1, 1, 1, 0, 0, 0, 1}, {0, 1, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 1, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 0} } -- 复制一个数组,用于存储修改后的结果 local arrb = {} for i = 1, #arra do arrb[i] = {} for j = 1, #arra[i] do arrb[i][j] = arra[i][j] end end -- 遍历数组,将被 1 包裹的 0 修改为 1 for i = 1, #arra do for j = 1, #arra[i] do if arra[i][j] == 0 then local isEdge = false if i == 1 or i == #arra or j == 1 or j == #arra[i] then isEdge = true else -- 检查上下左右四个方向的元素是否为 1 if arra[i-1][j] == 1 or arra[i+1][j] == 1 or arra[i][j-1] == 1 or arra[i][j+1] == 1 then isEdge = true end end if isEdge then arrb[i][j] = 1 end end end end -- 输出修改后的结果 for i = 1, #arrb do local row = "" for j = 1, #arrb[i] do row = row .. arrb[i][j] .. " " end print(row) end
这段代码是一个 Lua 脚本,它创建了一个二维数组 arra,遍历数组并将被 1 包裹的 0 修改为 1,然后输出修改后的结果。
具体来说,代码首先复制了一个数组 arra,用于存储修改后的结果。然后它遍历了数组 arra,对于每一个值为 0 的元素,检查它是否被 1 包裹,如果是,则将该元素在复制的数组 arrb 中修改为 1。最后,代码输出了修改后的结果。
值得注意的是,代码中使用了 Lua 的一些语法和数据结构,例如循环结构、条件语句、二维数组等等。如果你不熟悉 Lua,建议先学习一些基础知识再来理解这段代码。
local arra = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } local arrb = {} for i = 1, #arra do arrb[i] = {} for j = 1, #arra[i] do if arra[i][j] == 1 then arrb[i][j] = 1 else local top = i > 1 and arra[i - 1][j] == 1 local bottom = i < #arra and arra[i + 1][j] == 1 local left = j > 1 and arra[i][j - 1] == 1 local right = j < #arra[i] and arra[i][j + 1] == 1 if top or bottom or left or right then arrb[i][j] = 1 else arrb[i][j] = 0 end end end end -- 打印结果 for i = 1, #arrb do for j = 1, #arrb[i] do io.write(arrb[i][j] .. " ") end io.write("\n") end
这段代码的逻辑是:
1.定义一个二维数组 arra,并初始化为一个 10x10 的全 0 矩阵。
2.定义一个空的二维数组 arrb。
3.使用双重循环遍历 arra,对于 arra 中的每个元素,如果它为 1,则将 arrb 中对应位置也赋值为 1。
4.如果 arra 中的元素为 0,则判断其上下左右四个位置是否存在为 1 的元素,如果有则将 arrb 中对应位置赋值为 1,否则为 0。
5.最后打印出 arrb 数组的内容。
总的来说,这段代码的主要功能是将一个 10x10 的矩阵进行处理,将其中与周围有 1 相邻的元素标记为 1,其他元素标记为 0,并将处理后的结果存储在一个新的二维数组 arrb 中。
阅读全文