从多维数组中删除特定的数组元素?

5

我有困难在多维数组中循环并删除特定元素数组。我的多维数组看起来像这样:

myArray = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"]];

如果我有数字29,那么最有效的方法是循环遍历这个数组并删除第二个元素为29的数组元素吗?即 ["Dick", "29"]


一个for循环。根据您对数据的其他操作,您可以首先对数组进行排序。 - Felix Kling
我认为这将是indexOf和splice的某种组合? - aadu
indexOf 不会真正起作用,因为你正在寻找元素内的元素。但是你可以通过 http://jsperf.com/ 轻松测试哪个更快。 - Felix Kling
是的,这就是我想到的,所以我才问。但我不确定为了实现这个目标for循环应该长什么样子? - aadu
5个回答

11
var myArray = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"]];
var myNewArray = myArray.filter(function(item){ return item[1] != 29 })  

.filter使用本地代码循环遍历您的数组。构建一个新数组当然可能比仅从旧数组中切出一部分更昂贵,需要测试。


这个可以运行,但是你认为创建一个新的数组比上面的循环和splice方法效率低? - aadu
3
这种方法比我的快得多... http://jsperf.com/removearrfrommulti - brbcoding

2
myArray = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"]];
for(var i = 0; i <= myArray.length - 1; i++){
    if(myArray[i][1] == "29"){
        myArray[i].splice(0,2);
    }
}
console.log(myArray);

// returns [ [ 'Tom', '161' ], [], [ 'Harry', '46' ] ]

1
const organizers = [
  {
    id: '83f58b20-011d-11ed-b71c-47e6c5dfe098',
    createdAt: '2022-07-11T13:29:39.794Z',
    updatedAt: '2022-07-11T13:29:39.794Z',
    organizerId: '83deced0-011d-11ed-b71c-47e6c5dfe098',
    tournamentId: '83b37910-011d-11ed-b71c-47e6c5dfe098',
    organizerName: null
  },
  {
    id: '83f58b21-011d-11ed-b71c-47e6c5dfe098',
    createdAt: '2022-07-11T13:29:39.794Z',
    updatedAt: '2022-07-11T13:29:39.794Z',
    organizerId: '83e18df0-011d-11ed-b71c-47e6c5dfe098',
    tournamentId: '83b37910-011d-11ed-b71c-47e6c5dfe098',
    organizerName: 'MANOJ ABCD'
  }
];

const removeorganizerId = "83e18df0-011d-11ed-b71c-47e6c5dfe098"

var myNewArray = organizers.filter(function(item){ return item.organizerId !== removeorganizerId });



console.log("myNewArray ===> ", myNewArray);

查看演示请点击这里

https://onecompiler.com/javascript/3y9unh6vt


0

brbcoding的答案删除了数组元素的内容,但并没有将其删除。以下是一个解决方法:

myArray = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"]];
document.getElementById("a").innerHTML = myArray;
for(var i = 0; i <= myArray.length - 1; i++){
   if(myArray[i][1] == "29"){
       myArray.splice(i--,1);
}
}
document.getElementById("b").innerHTML = myArray;
console.log(myArray);

https://jsfiddle.net/tmzshopping/dfdveazk/

splice函数可以删除数组中的一行(在参数中指定为1),如果将1替换为2,则可以删除两行。i--会减少数组的长度。


0
   array_name = [[1,2,3],[],['Hi','hello','world']] 
    let temp = []
    array_name.forEach(element => {
      if (element != '' || `enter condition here`) {
        temp.push(element)
      }
    });
    
    array_name = temp; // array_name = [  [1,2,3], ['Hi','hello','world'] ] 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接