我已经有一个这样的对象数组,
details = [
{
'asjad': {
'age': 23,
'area': 'permiet'
}
}
我有这样的功能
function addValues(_arr,_name,_age){
_arr.push({
_name : {
age : _age
}
})
}
addValues(details,'foo',24);
在这里,我尝试通过传递要添加的对象的值来将值添加到对象数组。
但是预期的输出不是foo,而是将密钥添加为_name
答案 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,您需要以[]
开头以进行密钥插值