[英]Functions and objects in JavaScript
编写一个函数“transformFirstAndLast”,它接受一个数组,并返回一个对象:
示例输入:
['女王','伊丽莎白','红心','碧昂丝'],
函数的返回值(输出):
{
Queen: 'Beyonce'
}
请注意,输入数组可能具有不同数量的元素。 您的代码应该灵活地适应这一点。
例如,它应该处理如下输入:
['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 语句,但我不能在一个函数中为两个对象使用两个数组。 无论如何,我不知道我是完全错了还是我很接近找到解决方案,但是为什么我会在输出屏幕的第三行收到“未定义”消息?
只需使用数组索引来获取值并创建对象:
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));
实现所需结果的最简单方法是创建一个空对象并将给定数组的第一个元素作为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);
任何人都可以解释为什么我在输出屏幕的第三行收到“未定义”消息?
输出的原因是:
{ 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 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; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.