我有以下对象,我想获取staff数组中第一个项目的名称。
const staffObj = {
"staff":[
{ "name": "tom"},
{ "name": "sam"}
]
}
我可以这样做
console.log(staffObj['staff'][0]['name'])
console.log(staffObj.staff[0].name)
但我想要做的是从我创建的变量中访问我的对象 例如
const currentField = 'name'
const firstITem = ['staff'][currentField ]
console.log(firstITem,staffObj.firstITem)
实现此目的的正确语法是什么?
答案 0 :(得分:1)
你不能把这些Javascript源代码放在这样的变量中。每个部分都需要变量:
const currentType = 'staff';
const currentField = 'name';
console.log(staffObj[currentType][0][currentField]);
答案 1 :(得分:1)
您的代码中缺少[0]
。你应该使用一个函数来做这些事情。例如:
function firstFtaffField(staffObj, field) {
return staffObj['staff'][0][field];
}
// Usage
var name = firstFtaffField(staffObj, 'name');
答案 2 :(得分:0)
如果要将currentField
用作变量,可以执行此操作。请注意firstITem[currentField]
如何currentField
不在引号中。它是一个变量并通过javascript进行评估,然后应用为属性name
。
const staffObj = {
"staff":[
{ "name": "tom"},
{ "name": "sam"}
]
};
console.log(staffObj['staff'][0]['name']);
console.log(staffObj.staff[0].name)
const currentField = 'name';
const firstITem = staffObj.staff[0];
console.log(firstITem[currentField]);
答案 3 :(得分:0)
这是不可能的,但你可以通过将firstItem
定义为函数来做类似的事情:
const staffObj = {
"staff":[
{ "name": "tom"},
{ "name": "sam"}
]
};
const currentField = 'name';
const firstItem = x => x['staff'][0][currentField];
console.log(firstItem(staffObj))
答案 4 :(得分:0)
你看起来可能想要像功能一样的东西!
快速记录,因为您似乎是初学者:Arrow Functions
var get = n => c => c[n]; // function given a nest returns a function given a container returns the nest inside the container
var obj = {
staff:[
{ name: 'tom' },
{ name: 'sam' }
]
};
var getFirst = get(0);
var getStaff = get('staff');
console.log(getFirst(getStaff(obj))); // { name: 'tom }
当然这是依赖于构图的函数式编程,所以如果这不会给你发送太多的内容,你可以使用更熟悉的命令式版本:
var obj = { staff: [ {name:'tom'}, {name:'sam'}]};
var getStaff = obj => obj['staff'];
var getFirst = ary => ary[0];
var staff = getStaff(obj);
var firstStaff = getFirst(staff);
// alternate
//var getFirstStaff = obj => getFirst(getStaff(obj));
console.log(firstStaff);
正如你所看到的,两者之间有一些相似之处,但是组合是以相反的顺序完成的,采用了一些更先进的技术(构图,曲线)。既然你似乎是JS的新手,我建议你做第二种方式,这样才会更有意义,直到你理解第一种方式(这将使你在承诺中的思考更容易)
答案 5 :(得分:0)
在JavaScript中,someObject.someProperty
表示法是someObject['someProperty']
的简写。
这意味着如果您想要一个动态计算的属性名称,则不能使用“点”表示法,因为someObject.someProperty
将始终被解释为someObject['someProperty']
,而不管someProperty
{1}}可能是一个有效的变量,它包含一些字符串类型的值。
此外,如果您尝试使用someObject."someProperty"
之类的内容,您将获得Uncaught SyntaxError: Unexpected string
,因为这不是有效的JS语法。
答案 6 :(得分:-1)
没有这样的语法。使用eval的唯一方法就是:
const staffObj = {
"staff":[
{ "name": "tom"},
{ "name": "sam"}
]
};
const currentField = 'name';
const firstItem = ".staff[0]." + currentField;
console.log(eval("staffObj" + firstItem));
如果currentField
实际上是可变的,则每次更改firstItem
时都必须更改currentField
。