编写一个函数'transformFirstAndLast',它接受一个数组,并返回一个对象: 1)数组的第一个元素作为对象的键,和 2)数组的最后一个元素作为该键的值。
示例输入: ['女王','伊丽莎白','心中','碧昂丝'],
函数的返回值(输出): { 女王:'碧昂丝' } 请注意,输入数组可能具有不同数量的元素。您的代码应灵活适应。
E.g。它应该处理如下输入: ['Kevin','Bacon','Love','Hart','Costner','Spacey']
这是我写的代码:
function transformFirstAndLast(array) {
var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
var arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey']
var myObject = {};
key = arrayList.shift();
value = arrayList.pop();
myObject[key] = value
var myObj2 = {};
key = arrayList2.shift();
value = arrayList2.pop();
myObj2[key] = value;
console.log(myObject);
console.log(myObj2);
}
transformFirstAndLast();
输出是这样的:
{ Queen: 'Beyonce' }
{ Kevin: 'Spacey' }
=> undefined
我知道我应该有一个return语句,但我不能在一个函数中使用两个数组用于2个对象,不管怎样,我不知道我是完全错了还是我非常接近找到解决方案,但有人可以解释为什么我在输出屏幕的第三行得到“未定义”的消息?谢谢!
答案 0 :(得分:3)
只需使用数组索引获取值并创建对象。
function transformFirstAndLast(array) {
var myObject = {};
myObject[array[0]] = array[array.length-1];
return myObject;
}
var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
var arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey']
console.log(transformFirstAndLast(arrayList));
console.log(transformFirstAndLast(arrayList2));

答案 1 :(得分:1)
实现所需结果的最简单方法是创建一个空对象,并将给定数组的第一个元素指定为key
,将数组中的最后一个元素指定为value
var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'],
arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey'];
function transformFirstAndLast(array) {
var res = Object.create(null);
res[array[0]] = array[array.length-1];
console.log(res);
return res;
}
transformFirstAndLast(arrayList);
transformFirstAndLast(arrayList2);
答案 2 :(得分:0)
任何人都可以解释为什么我会得到这个" undefined"输出屏幕第三行的消息?
输出的原因是:
{ Queen: 'Beyonce' }
{ Kevin: 'Spacey' }
=> undefined
是因为你的函数transformFirstAndLast没有return
语句,但函数必须总是返回一些东西,因此返回undefined
。
function transformFirstAndLast(array) {
var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
var arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey']
var myObject = {};
key = arrayList.shift();
value = arrayList.pop();
myObject[key] = value
var myObj2 = {};
key = arrayList2.shift();
value = arrayList2.pop();
myObj2[key] = value;
console.log(myObject); <-- first output
console.log(myObj2); <-- second output
}
transformFirstAndLast(); <-- third output
第三个输出正在调用该函数,但也返回一个值。如果您只有1;
,则会输出1
。
你可以通过以下方式解决这个问题:
transformFirstAndLast(), 'done';
return true
中添加一个return语句;理想情况下,您希望返回对象return myObject;
这是一个更强大的示例,说明如何将数组,多个数组甚至一串字符串作为函数的参数并返回创建的对象。
"use strict";
var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
var arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey'];
console.log(
'Example 1 (passing arrays):\n',
transformFirstAndLast(arrayList, arrayList2)
);
console.log(
'Example 2 (passing strings):\n',
transformFirstAndLast('thank','you','mother')
);
function transformFirstAndLast() {
var obj = {}, arrs = [];
if (!Array.isArray(arguments[0]))
// handle a bunch of strings (Example 2)
arrs = [Object.keys(arguments).map(k=>arguments[k])];
else
// handle 1 or more array
arrs = [...arguments];
arrs.forEach( arr => {
obj[arr[0]] = arr[arr.length-1];
});
return obj;
}
&#13;