6

我有以下对象:

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

在这个例子中,我想删除

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

从中。我已经尝试了我在 Stack Overflow 上找到的所有解决方案,但无法让它们中的任何一个起作用。我主要是 PHP 人,所以我可能会错过一些重要的东西?

4

6 回答 6

14

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

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

delete obj["1"];

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

编辑 正如评论中指出的那样,obj无论您如何处理该 [1]属性,它都是一个对象并且没有数组。我的最后一点是为了明确说明您使用的是对象而不是数组。

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

于 2012-04-16T13:12:50.737 回答
4
 var myObj= {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}

delete myObj['1'];

alert ( myObj['1']);

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

跨浏览器问题

尽管 ECMAScript 使对象的迭代顺序依赖于实现,但似乎所有主流浏览器都支持基于最早添加的属性的迭代顺序(至少对于不在原型上的属性)。但是,在 Internet Explorer 的情况下,当对属性使用 delete 时,会导致一些令人困惑的行为,从而阻止其他浏览器使用像对象字面量这样的简单对象作为有序关联数组。在资源管理器中,虽然属性值确实设置为未定义,但如果稍后添加一个具有相同名称的属性,则该属性将在其旧位置迭代——而不是在迭代序列的末尾,正如人们可能期望的那样删除该属性,然后将其添加回来。

于 2012-04-16T13:11:40.040 回答
2
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);
于 2017-07-03T06:59:48.680 回答
1

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

于 2012-04-16T13:11:51.797 回答
1

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

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

delete x['1'];

另外,请检查:

在 JavaScript 中删除对象

于 2012-04-16T13:19:37.017 回答
0

通过这种方式将您的Object(不是Array)分配给变量:

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

然后做:

delete o['1'];

就是这样!

于 2012-04-16T13:15:31.217 回答