2012-04-16 73 views
3

我具有以下多维数组中删除元素:从多维数组

{"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}} 

在这个例子中我想从它除去

"1":{"cid":"1","uid":"3"} 

。 我尝试了所有解决方案,我发现在stackoverflow,并不能让他们任何工作。我主要是PHP人,所以我可能会错过这里重要的东西?

+3

这不是一个数组它是一个'Object' 。 – 2012-04-16 13:09:33

+1

要得到一个数组,你应该使用''''而不是'{}'。 – 2012-04-16 13:11:00

+1

可能重复的[如何从JavaScript对象中删除键?](http://stackoverflow.com/questions/3455405/how-to-remove-a-key-from-a-javascript-object) – 2012-04-16 13:11:12

回答

12

只需使用delete以及相应的属性即可。

var obj = {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}; 

delete obj["1"]; 

注1绕"将其标记为一个标识符,而不是作为一个数组索引!

编辑 正如在评论中指出,obj是一个对象,并没有数组无论你如何解决[1]财产。我最后的注意事项只是为了说清楚你正在使用一个对象而不是一个数组。

根据我的经验,大多数人将整数属性与数组和字符串属性关联到对象。所以我认为在给出的方式中突出显示财产可能会更有帮助。

+4

它不是数组索引,因为* obj *是一个对象,不是因为该值是一个字符串。解决属性名称的一个早期步骤就是将它们转换为字符串,所以'obj [1]'和'obj ['1']'的结果不能用相同的方式区分'obj [(function(){return 1; }())]'会。由于数组是对象,'array [1]'与'array ['1']'结果相同。 – RobG 2012-04-16 13:20:34

4
var myObj= {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}} 

delete myObj['1']; 

alert (myObj['1']); 

请注意有跨平台的问题删除:

跨浏览器问题

虽然ECMAScript中,使对象的迭代顺序 实现相关的,它可能出现的所有主流浏览器 首先支持基于最早添加属性 的迭代订单(至少对于不在原型上的属性)。但是,在Internet Explorer的 的情况下,当使用属性上的删除时,某些 会混淆行为结果,从而阻止其他浏览器使用简单对象(如对象文字)作为有序关联数组。在 Explorer中,虽然属性值确实设置为undefined,但如果一个 稍后添加了一个具有相同名称的属性,则该属性将为 在其旧位置迭代 - 而不是迭代序列 的末尾可能会在删除该属性后期待,然后将其添加回 。

+1

在数字索引上使用点符号给出语法错误,使用括号! – 2012-04-16 13:12:50

+1

@EliasVanOotegem我在编写此消息时已经对其进行了纠正 – 2012-04-16 13:13:38

+0

看起来您正在引用MDN。可能是一个好的想法来信源。 :) – 2012-04-16 13:31:06

1

JavaScript没有多维数组,只有数组和对象。这就是说:delete theObject['1'];应该可以正常工作

+1

JavaScript确实有多维数组。 – jbabey 2012-04-16 13:29:33

+0

@jbabey:如果所有键都是数字,则var将表现为一个数组,但在本例中:如果您一步一步地赋值('var theArray = []; theArray ['1'] = []; theArray ['1'] ['cid'] ='2';'),可以尝试像'theArray ['1'] .length'或者尝试'theArray.length'。这些方法分别返回“0”和“2”。最好将var作为一个对象。 – 2012-04-16 13:46:13

+0

我意识到OP没有使用数组,但是这并不意味着JavaScript多维数组不再存在:P – jbabey 2012-04-16 14:06:32

0

将您的Object(不是Array)给一个变量,像这样:

var o = {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}; 

然后做:

delete o['1']; 

这就是它!

1
var arr=[[10,20,30],[40,50,60],[70,80,90]]; 

for(var i=0;i<arr.length;i++){ 
    for(var j=0;j<arr[i].length;j++){ 
     if(arr[i][j]==50){ 
      arr[i].splice(j,1); 
     } 
    } 
} 

document.write(arr); 
+1

添加一些解释和回答这个答案如何帮助OP在解决当前问题 – 2017-07-03 07:17:59