JavaScript如何检查数组对象是否存在或未定义

3

如果数组中不存在该对象,如何将一个新对象添加到已有数组中?

我查看了这个链接:如何在JavaScript中检查数组元素是否存在?

但是我不确定如何推入新的对象!

var element = [];

element['obj'] = 'one';

if (typeof element['obj']['bg'] === 'undefined') {

  console.log('not defined');

  element['obj']['bg'] = 'red';

  console.log(element);

} else {
  console.log('defined');
}


element.push({'bg':'red'}); 这个怎么样?你的问题不太清楚,请具体说明一下。 - Daniel B
你到底想要实现什么?element['obj'] = 'one'; --> 这将把 element['obj'] 初始化为字符串,然后你想要在这个字符串上添加一个键值对吗? - SDekov
1
你想使用array还是objectelement['obj'] = 'one';会在element上创建属性obj,但它不会计入长度。 - fuyushimoya
你期望哪种数据结构? - lshettyl
我不理解你的代码是做什么的。但是如果 element['obj'] = 'one',当你执行 element['obj']['bg'] === 'undefined' 时,它等同于 'one'['bg']。我认为这没有意义。 - Sapikelio
5个回答

2

该元素的类型为字符串,而不是对象或数组。

将特定变量更改为数组:

var element = {};
element['obj'] = ['one'];
if ( typeof element['obj']['bg'] === 'undefined' ) {
    console.log('not defined');
    element['obj']['bg'] = 'red';
    console.log(element);
} else {
    console.log('defined');
}

或者更好的是一个对象:
element['obj'] = {};
element['obj']['id'] = 'one';

string对象是不可变的对象。


但是在一个数组上设置bg是一种好的做法吗?也许我们应该等待OP解释他所期望的结构。 - fuyushimoya
@fuyushimoya 理解情况... 他只是在设置一个值。仅此而已!OP在这里并不意味着任何CSS或特定的东西。 :) - Praveen Kumar Purushothaman
1
是的,我同意你的看法,这正是OP从他的代码中期望得到的。 - fuyushimoya

2

var element = [];定义了一个数组而不是对象。要向数组中添加新值,您需要使用push方法:

element.push({'obj' : 'one'});

但我认为你不需要在这里创建一个数组,而只需创建一个对象。像这样声明您的对象:var element = {};

这样,行element['obj'] = 'one';就可以工作了,您有一个键为obj,值为one的对象。

当您编写element['obj']['bg']时,您尝试访问嵌套在对象中的对象。因此,在设置值red之前,您需要创建该对象:

element['obj'] = {};
element['obj']['bg'] = 'red';

完整示例:

完整的示例:

var element = {};

element['obj'] = {};

if (typeof element['obj']['bg'] === 'undefined') {

  console.log('not defined');

  element['obj']['bg'] = 'red';

  console.log(element);

} else {
  console.log('defined');
}


1
尝试在之前插入一个空数组;
var element = [];

element['obj'] = 'one';

if ( typeof element['obj']['bg'] === 'undefined' ) {

    console.log('not defined');

    element['obj'] = [element['obj']];

    element['obj']['bg'] = 'red';

    console.log( element);

} else {
    console.log('defined');
}

原始值消失了! - Praveen Kumar Purushothaman
但是你不能同时拥有element['obj'] = 'one';和element['obj']['bg'] = 'red'; - buræquete
你可以这样做...看看我的答案。 - Praveen Kumar Purushothaman
第一个意味着“obj”索引值是一个字符串,而第二个需要它是一个数组。你需要选择! - buræquete
我更新了你的答案以保存原始值。如果不需要,请还原它。谢谢。 - Praveen Kumar Purushothaman

1
var element = [];

element['obj'] = 'one';

if ( typeof element['obj']['bg'] === 'undefined' ) {

    console.log('not defined');

    element['obj'] = {'bg':'red'};

    console.log("My value:"+element['obj']['bg'] );

} else {
    console.log('defined');
}

http://jsfiddle.net/o66uhd05/3/


0
你可以尝试这种方式。
var element = [],item = [];

item['obj'] = 'one';
element.push(item);

if ( typeof element['obj']['bg'] === 'undefined' ) {

    console.log('not defined');

    item['bg']='red';

    element.push(item);

    console.log( element);

} else {
    console.log('defined');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接