我正在尝试编写一个将字符串数组作为其输入的函数。该函数应返回带有(1)键的值对的对象。数组的第一个元素应该是属性名称,而数组的最后一个元素应该是它的键。
function transformFirstAndLast(array){
return {`${array[0]}`: array[length-1];}
}
以上内容给我一个错误。有人可以提供详细的解释为什么不起作用吗?我想避免创建单独的变量来存储第一个和最后一个数组索引中的值。
答案 0 :(得分:1)
您缺少{
,并且不能使用模板字符串作为键。要将“变量”用作对象中的键,应使用变量周围的刹车。这是工作代码。
function transformFirstAndLast(array){
return {[array[0]]: array[array.length-1]};
}
答案 1 :(得分:1)
我猜想模板字面量在这里是不必要的,只需在修复此行array[length-1]
之后像这样尝试,因为它的错误,正确的是array[array.length-1]
。我添加了更多详细的代码,但您也可以在return {[array[0]]: array[array.length-1]};
函数上使用类似transformFirstAndLast(array)
的简写形式。
function transformFirstAndLast(array){
const result = {};
result[array[0]] = array[array.length-1];
return result;
}
console.log(transformFirstAndLast(['a','b','c','d','e']))
答案 2 :(得分:1)
是的,您可以使用字符串文字作为键。但事实是它们是在运行时计算的。因此,您需要将它们视为表达式。并将变量/表达式作为键,您需要将它们包装在[]
let a = {
`key`: value
} // is not allowed
let a = {
[`key`]: value
} // is allowed since you have wrapp
针对您的情况
return {[`${array[0]}`]: array[array.length-1]};
现在,由于您已经将array[0]
项目包装在字符串文字中,因此您将获得第0个项目的字符串值。如果您的array[0]
将成为对象,那么它将无法正常工作。它必须是字符串或数字。否则,您会得到"[object Object]"
作为密钥
答案 3 :(得分:0)
您的问题确实可以归结为:“我可以使用表达式作为对象常量中的键吗?”
答案是肯定的(因为es6):
function yell(template, ...parts) {
return parts[0] + '!';
}
function foo() {
return 'bar';
}
class Person {
constructor(first, last) {
this.first = first;
this.last = last;
}
toString() {
return `${this.first} ${this.last}`;
}
}
let names = ['Abe'];
let my_obj = {
[3+5]: 'some_value',
[yell `${foo()}`]: foo(),
[names[0]]: 64,
[new Person('Rafael', 'Cepeda')]: 25
};
console.log(my_obj);
只要表达式计算为字符串,一切都是公平的。
答案 4 :(得分:0)
Parameter