我正在处理一个函数,该函数返回一个数组,该数组包含位于给定键的数组的最后一个元素。
- 如果数组为空,则应返回一个空数组 - 如果给定键的属性不是数组,则返回一个空数组 - 如果键上没有属性,则应返回一个空数组。
这是我的代码:
function getAllButLastElementOfProperty(obj, key) {
var output = [];
if ( key in obj && Array.isArray(obj[key]) && obj[key].length !== 0)
{
for(var i = 0; i < obj[key].length; i++ ){
if(obj[key].length - 1){
output.push(obj[key][i]);
}
}
return output;
}
}
var obj = {
key: [1, 2, 3]
};
var output = getAllButLastElementOfProperty(obj, 'key');
console.log(output); // --> MUST RETURN [1,2]
我的代码返回[1,2,3]。
我知道我做错了什么?
答案 0 :(得分:1)
优化的getAllButLastElementOfProperty
功能版本:
function getAllButLastElementOfProperty(obj, k) {
if (!obj.hasOwnProperty(k) || !Array.isArray(obj[k]) || obj[k].length === 0) {
return [];
}
return obj[k].slice(0, -1); // getting all but the last element of the array
}
var obj = { key: [1, 2, 3] },
output = getAllButLastElementOfProperty(obj, 'key');
console.log(output);
&#13;
答案 1 :(得分:0)
您可以通过将数组作为参数然后调用getAllButLastElement(obj.key)
来概括您的函数。如果对象没有属性key
,这也会返回一个空数组。
然后可以这样实现:
function getAllButLastElement(arr) {
if(!Array.isArray(arr))
return []; // Return an empty array
return arr.slice(0, -1);
}
let obj = {
'key': [ 1, 2, 3 ],
'empty': [ ]
};
console.log('obj.key:', getAllButLastElement(obj.key)); // Proper Array
console.log('obj.empty:', getAllButLastElement(obj.empty)); // Empty Array
console.log('obj.unknown:', getAllButLastElement(obj.unkown)); // Property does not exist
将负数传递给Array.prototype.slice
可以从最后访问数组。在代码段中,这意味着我们从第一个元素到索引arr.length - 1
获取所有内容。如果我们使用arr.slice(-1)
,那么只会返回最后一个元素(当然仍然是数组),这与你想要的完全相反。
答案 2 :(得分:0)
请为if
声明
if(i !== obj[key].length - 1){
output.push(obj[key][i]);
}