Javascript 从多个数组中删除元素

Javascript 从多个数组中删除元素,javascript,Javascript,如果我有: var arr = ['2.4.1', 2004001, 'YYY', 'ddd', 'd1']; 然后我可以删除值'2.4.1': arr.splice(arr.indexOf('2.4.1'), 1); 它可以工作,但在IE7/8中不起作用 如何使我的: var str='2.4.1'; var arr=[ [1.1.3',1001003',XXX',aaa',a3'], [1.1.1',1001001',XXX',aaa',a1'], [1.3.1',1003001',

如果我有:

var arr = ['2.4.1', 2004001, 'YYY', 'ddd', 'd1'];
然后我可以删除值
'2.4.1'

arr.splice(arr.indexOf('2.4.1'), 1);
它可以工作,但在IE7/8中不起作用


如何使我的:

var str='2.4.1';
var arr=[
[1.1.3',1001003',XXX',aaa',a3'],
[1.1.1',1001001',XXX',aaa',a1'],
[1.3.1',1003001',XXX',ccc',c1'],
[2.4.2',2004002',YYY',ddd',d2'],
[2.4.1',2004001',YYY',ddd',d1'],
[1.2.2',1002002',XXX',bbb',b2'],
[1.2.1',1002001',XXX',bbb',b1'],
];
阵列拼接(4,1);
//^如何根据我的值“2.4.1”接收此索引?

//请帮助制作不带JQuery的跨浏览器。
IE<9不“知道”
Array.indexOf
,因此您需要一个polyfill。你可以找到

您还可以使用
Array.filter
删除包含“2.4.1”的数组(请参阅代码片段):

对于你需要的IE<9

//检查是否存在Array.filter,如有必要,添加它
polyfills();
//声明
var-str='2.4.1';
var arr=[
[1.1.3',1001003',XXX',aaa',a3'],
[1.1.1',1001001',XXX',aaa',a1'],
[1.3.1',1003001',XXX',ccc',c1'],
[2.4.2',2004002',YYY',ddd',d2'],
[2.4.1',2004001',YYY',ddd',d1'],
[1.2.2',1002002',XXX',bbb',b2'],
[1.2.1',1002001',XXX',bbb',b1'],
];
var result=document.querySelector(“#result”);
//原版
result.innerHTML='
arr
最初:
'+ arr.map(函数(v){return v.join();}).join('
'); //使用过滤器将其移除 arr=removesub(arr,str); //删除后显示数组 result.innerHTML+='
arr
删除后:
'+ arr.map(函数(v){return v.join();}).join('
'); //去除函数 函数removesub(arr2RemoveFrom、str2Remove){ arr2RemoveFrom=arr2RemoveFrom.filter( 函数(v){返回v[0]!==str2Remove;} ); 返回arr2RemoveFrom; } 函数polyfills(){ //源MDN.Removed.comments if(!Array.prototype.filter){ Array.prototype.filter=函数(fun/*,thisArg*/){ "严格使用",; if(this==void 0 | | this==null){ 抛出新的TypeError(); } var t=对象(本); var len=t.length>>>0; 如果(乐趣的类型!=“功能”){ 抛出新的TypeError(); } var-res=[]; var thisArg=arguments.length>=2?参数[1]:无效0; 对于(变量i=0;i>>0; if(回调类型!==“函数”){ 抛出新类型错误(回调+'不是函数'); } 如果(arguments.length>1){ T=thisArg; } A=新阵列(len); k=0; while(k
code{
颜色:红色;
}

您可以使用第一个值作为键,使用数组散列而不是数组数组,并使用该方法

大概是这样的:

var str = '2.4.1';

var arr = {
  '1.1.3': ['1.1.3', 1001003, 'XXX', 'aaa', 'a3'],
  '1.1.1': ['1.1.1', 1001001, 'XXX', 'aaa', 'a1'],
  '1.3.1': ['1.3.1', 1003001, 'XXX', 'ccc', 'c1'],
  '2.4.2': ['2.4.2', 2004002, 'YYY', 'ddd', 'd2'],
  '2.4.1': ['2.4.1', 2004001, 'YYY', 'ddd', 'd1'],
  '1.2.2': ['1.2.2', 1002002, 'XXX', 'bbb', 'b2'],
  '1.2.1': ['1.2.1', 1002001, 'XXX', 'bbb', 'b1']
};


delete arr[str];

这是否有帮助:如果您不喜欢polyfill,它更多的是代码,但您可以提取、使用regexp标识正确的键,然后删除它。当您说“删除”时,您的意思是“删除”数组中的值或只是复制它?“删除”->删除键和值谢谢您的回答。我之前看了“polyfill”,但没能固定住我的箱子。嗨@Alex,请看修改后的答案,以获得另一个答案。非常感谢您的帮助。删除后会有插入元素和数组排序(按1001…),因此我无法进行更改。谢谢好主意。
var str = '2.4.1';

var arr = {
  '1.1.3': ['1.1.3', 1001003, 'XXX', 'aaa', 'a3'],
  '1.1.1': ['1.1.1', 1001001, 'XXX', 'aaa', 'a1'],
  '1.3.1': ['1.3.1', 1003001, 'XXX', 'ccc', 'c1'],
  '2.4.2': ['2.4.2', 2004002, 'YYY', 'ddd', 'd2'],
  '2.4.1': ['2.4.1', 2004001, 'YYY', 'ddd', 'd1'],
  '1.2.2': ['1.2.2', 1002002, 'XXX', 'bbb', 'b2'],
  '1.2.1': ['1.2.1', 1002001, 'XXX', 'bbb', 'b1']
};


delete arr[str];