【问题标题】:Remove element from nested object从多维数组中删除元素
【发布时间】:2012-04-27 19:40:33
【问题描述】:

我有以下多维数组:

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

在这个例子中我想删除

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

从中。 我已经尝试了我在 stackoverflow 上找到的所有解决方案,但无法使它们中的任何一个起作用。我主要是 php 人,所以我可能会在这里错过一些重要的事情?

【问题讨论】:

标签: javascript object


【解决方案1】:

只需将delete 与适当的属性一起使用即可。

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

delete obj["1"];

注意 1 周围的 " 将其标记为标识符而不是数组索引!

编辑 正如评论中所指出的,obj 是一个对象,而不是数组,无论您如何处理 [1] 属性。我的最后一点是为了明确说明您正在使用对象而不是数组。

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

【讨论】:

  • 它不是数组索引,因为 obj 是一个对象,而不是因为值是一个字符串。解析属性名称的早期步骤是将它们转换为字符串,因此obj[1]obj['1'] 的结果与obj[(function(){return 1;}())] 的结果相同。由于数组是对象,array[1] 的结果与array['1'] 相同。
【解决方案2】:
 var myObj= {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}

delete myObj['1'];

alert ( myObj['1']);

请注意删除存在跨平台问题:

跨浏览器问题

虽然 ECMAScript 使对象的迭代顺序 依赖于实现,似乎所有主流浏览器 支持基于最早添加的属性的迭代顺序 首先(至少对于不在原型上的属性)。然而,在 以 Internet Explorer 为例,当对属性使用 delete 时,一些 混淆行为结果,阻止其他浏览器使用 像对象文字这样的简单对象作为有序关联数组。在 资源管理器,而属性值确实设置为未定义,如果为 稍后添加一个具有相同名称的属性,该属性将是 在它的旧位置迭代——而不是在迭代序列的末尾 正如人们在删除属性然后添加后所期望的那样 它回来了。

【讨论】:

  • 在数字索引上使用点符号会产生语法错误,请使用括号!
  • @EliasVanOotegem 在您编写此消息时,我已经更正了它
  • 看起来你在引用 MDN。相信来源可能是个好主意。 :)
  • @amnotiam 我已经把它放在引号标签中......在网络上搜索它需要 1 秒钟才能到达 mdn......
  • @amnotiam 我不想成为一个孩子,但我看到你的答案中有一个没有任何链接或信用的引号......但我不会发布它们。我们(包括你)不必一直“精明”......
【解决方案3】:
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);

【讨论】:

  • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
【解决方案4】:

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

【讨论】:

  • javascript 确实有多维数组。
  • @jbabey:授予,如果所有键都是数字,则 var 将表现为一个数组,但在此示例中:如果您逐步分配值 (var theArray = []; theArray['1'] = []; theArray['1']['cid']='2';),请尝试执行类似 @987654323 的操作@,或试试theArray.length。这些方法分别返回02。最好将 var 作为对象来处理。
  • 我意识到 OP 没有使用数组,但这并不意味着 javascript 多维数组不复存在:P
  • 很公平:)...只需阅读您在问题本身下的评论即可。这只是常见的误解之一,以“我有这个多维数组”开头的问题,然后是一个对象……这让我很紧张,但我想我有点迂腐。
【解决方案5】:

你可以在 javascript 中使用 delete 例如:

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

delete x['1'];

另外,检查一下:

Deleting Objects in JavaScript

【讨论】:

    【解决方案6】:

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

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

    然后做:

    delete o['1'];
    

    就是这样!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 2011-05-26
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多