javascript - 如何删除数组内数组的索引?
问题描述
我想删除更大数组中的数组中的索引;例如:
let myArray = [
[{general : true, name: 'a' },{general : true, name: 'b' },{general : false, name: 'c' }],
[{general : false, name: 'd' },{general : true, name: 'e' },{general : false, name: 'f'}],
[{general : true, name: 'i' },{general : false, name: 'h' },{general : false, name: 'g' }]
]
我想删除所有对象general == false
来得到这个:
myFilteredArray = [
[{general : true, name: 'a' },{general : true, name: 'b' }],
[{general : true, name: 'e' }],
[{general : true, name: 'i' }]
]
我这样做了,但它不起作用:
let l = myArray.length;
for (let i = 0; i < l; i++) {
for (let j = 0; j < myArray[i].length; j++) {
if(!myArray[i][j].general){
myArray[i].splice(j,1)
}
}
}
提前致谢。
解决方案
问题是当您有两个general: false
彼此相邻的对象时。您正在查看 index j
,并可能删除该条目,然后移至它之后的下一个条目 - 但是当您删除一个条目时,它之后的条目将向上移动到 indexj
并且永远不会被检查。
三个选项:
当您删除条目时,递减,
j
以便您检查在下一次通过时移动的条目。从末端向后循环。
用于
filter
创建新数组,而不是就地修改数组,可能与map
外部数组结合使用:
#2 比 #1 更受欢迎:
let l = myArray.length;
for (let i = 0; i < l; i++) {
for (let j = myArray[i].length - 1; j >= 0; --j) {
if (!myArray[i][j].general) {
myArray[i].splice(j,1)
}
}
}
现场示例:
let myArray = [
[{general : true, name: 'a' },{general : true, name: 'b' },{general : false, name: 'c' }],
[{general : false, name: 'd' },{general : true, name: 'e' },{general : false, name: 'f'}],
[{general : true, name: 'i' },{general : false, name: 'h' },{general : false, name: 'g' }]
];
let l = myArray.length;
for (let i = 0; i < l; i++) {
for (let j = myArray[i].length - 1; j >= 0; --j) {
if (!myArray[i][j].general) {
myArray[i].splice(j,1)
}
}
}
console.log(myArray);
这是#3:
myArray = myArray.map(subarray => subarray.filter(({general}) => general));
现场示例:
let myArray = [
[{general : true, name: 'a' },{general : true, name: 'b' },{general : false, name: 'c' }],
[{general : false, name: 'd' },{general : true, name: 'e' },{general : false, name: 'f'}],
[{general : true, name: 'i' },{general : false, name: 'h' },{general : false, name: 'g' }]
];
myArray = myArray.map(subarray => subarray.filter(({general}) => general));
console.log(myArray);
推荐阅读
- metpy - 示例中的 mpcalc.advection dim_order 和缺失值
- reactjs - 无法从 react-native-dropdown-picker 中选择项目
- tomcat8 - Tenable 显示将 tomcat 升级到 8.5.60 的漏洞,尽管升级已在存档服务器中完成
- express - 如何不在 Node.js 中保存相同的电子邮件用户?
- c# - 模型类属性字符串长度为 nvarchar max
- oracle - oracle 中的 ORA-00955 错误,我要更改什么来解决此问题
- socket.io - 使用 socket.io 时如何获取房间内的客户端数量?
- java - Flink集群写入mysql数据丢失
- javascript - 如何在 Sequelize 上使用关联进行多重插入?
- python-3.x - Selenium Chromedriver 在谷歌云服务器上不起作用