从函数向数组添加新对象

时间:2018-10-07 07:43:44

标签: javascript object

我已经有一个这样的对象数组,

 details = [
    {
        'asjad': {
            'age': 23,
            'area': 'permiet'
        }
    }

我有这样的功能

function addValues(_arr,_name,_age){

    _arr.push({
        _name : {
            age : _age
        }
    })

}


addValues(details,'foo',24);

在这里,我尝试通过传递要添加的对象的值来将值添加到对象数组。

但是预期的输出不是foo,而是将密钥添加为_name

5 个答案:

答案 0 :(得分:1)

如果您在JavaScript中定义了这样的对象,则键将始终是字符串-在您的情况下为_name。要将动态变量作为键分配给对象,您需要使用括号符号[]。但是,该值作为表达式求值。在您的情况下,_age被评估,因为它是一个值而不是键。

例如,您可以轻松修复这个例子:

function addValues(_arr, _name, _age){

    var object = {};
    object[_name] = {
        age: _age
    };
    _arr.push(object);

}

有许多方法可以在JavaScript中声明对象:

内联声明:

var object = {
   _name: '123'
};

_name将始终是常量字符串。

点符号:

var object = {};
var object._name = '123';

→在点表示法中,_name还将始终是常量字符串。

括号符号:

var object = {};
var object[_name] = '123';

→在方括号中,_name是一个计算表达式。在这种情况下,请使用变量名_name。您也可以使用object['_name']传递字符串。

计算出的属性名称:

正如其他答案所指出的那样,使用ES6(较新版本的JavaScript,并非所有浏览器都完全支持,但可以将其转换为ES5),您也可以使用computed property names

var object = {
   [_name]: '123'
};

→在此表示法中,将评估_name,其值将成为该对象的键。请记住,如果不转载此代码段,您将不会获得IE支持。

答案 1 :(得分:1)

只需将上面的代码更改为此。您将满足您的需求。

function addValues(_arr,_name,_age){

    _arr.push({
        [_name] : {
            age : _age
        }
    })

}

答案 2 :(得分:0)

function addValues(_arr,_name,_age){

    var newItem = {};
    newItem[_name] = {};
    newItem[_name]['age'] = _age;

    _arr.push(newItem);
}

答案 3 :(得分:0)

UPDATE us
SET    us.status =  ust.status 
FROM   tbl_users AS us
       INNER JOIN tbl_userstatus  AS ust  
              on us.statusid =  ust.statusid
         WHERE us.username = "francis"

答案 4 :(得分:0)

_arr.push({ [_name] : { age : _age } })

创建密钥值对json,您需要以[]开头以进行密钥插值