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];