当'var array = {}'时,如何解决"TypeError:array.splice不是函数"?

use*_*882 25 javascript arrays jquery

可能重复:
如何从javascript对象中删除属性
JavaScript Hashmap等效

我正在使用jQuery,我正在以这种方式处理变量:

var array = {};

array[an_object]      = something
array[another_object] = something_else
array[...]            = ...
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该splice方法时,array我得到一个TypeError: array.splice is not a function.我的意图是an_objectarray变量中删除"密钥"及其所有内容.

我该怎么做?


注意:当我运行console.log(array[an_object])(同样有效another_object和所有其他对象)时,我得到:

[Object { label="str1",  value=1 }, Object { label="str2",  value=2 }, { label="strN",  value=N }]
Run Code Online (Sandbox Code Playgroud)

Cer*_*rus 21

首先,将变量命名为它们.array如果您使用它来创建对象,那么您使用的名称会产生误导.

var myObject = {};

myObject[an_object]      = "xyz";
myObject[another_object] = "abc";
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用以下delete语句删除对象中的条目:

delete myObject[an_object]; // Returns true / false if the deletion is a success / failure
console.log(myObject[an_object]) // Returns undefined
Run Code Online (Sandbox Code Playgroud)

现在,说,这不会像你期望的那样工作.myObject[an_object]将包含"abc"
不要使用对象作为键.请改用字符串.
这是因为输入的任何参数[]都将转换为字符串.实际上,你正在进入myObject["[object Object]"]


Bil*_*oon 5

我对你构建对象的方式有点困惑,因为an_object用作键的键必须是键的字符串值.假设您这样做,这应该通过删除对象的不受欢迎的属性来工作.

var array = {};

array['an_object'] = "something"
array['another_object'] = "something_else"

delete(array.an_object)

console.log(array) // Object { another_object = "something_else" }
Run Code Online (Sandbox Code Playgroud)

编辑

正如注释中所详述的,如果问题是对象被用作另一个对象的键(在这种情况下容易引起混淆array),那么问题是对象首先被转换为它的字符串表示形式以在对象的上下文中使用键.因此,用作键的所有对象实际上都会引用一个被调用的键[object Object],而您用作键的对象将覆盖以前的键.

在问题的例子中......

array[an_object]      = something
array[another_object] = something_else
// array: Object { "[object Object]" = "something_else" }
Run Code Online (Sandbox Code Playgroud)

  • 还有更多.他正在尝试使用_Object_作为关键. (2认同)
  • @ user12882:您不能将对象用作键.您用作键的任何内容都将转换为字符串.对象的默认字符串表示形式是""[object Object]"`.你可以覆盖每个对象的`toString`方法来返回一个唯一的标识符,但是这个解决方案不是很常见(afaik),可能比有用的更令人困惑.更好地了解对象的工作原理:https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects. (2认同)