数组头部的n个元素的排序

时间:2018-02-27 15:26:46

标签: javascript arrays for-loop

我正在Freecodecamp学习Javascript。这个挑战是从阵列的头部切割n个元素。我的代码有效,除非在1处切片。

我已经有一段时间了,不幸的是我没有充分利用循环来找到我自己的解决方案。我觉得最好,我知道为什么会出错,而不是发现另一种方法。非常感谢提前。

function slasher(arr, howMany) {
// it doesn't always pay to be first
 var newArr = [];

for (i=0; i < arr.length; i++) {


if (arr[i] <= howMany) {
  return arr.slice(howMany);
}
else {
return arr;
}
}
}
slasher(["burgers", "fries", "shake"], 1);

expected output
slasher([1, 2, 3], 2) should return [3].
slasher([1, 2, 3], 0) should return [1, 2, 3].
slasher([1, 2, 3], 9) should return [].
slasher([1, 2, 3], 4) should return [].
slasher(["burgers", "fries", "shake"], 1) should return ["fries", "shake"].
slasher([1, 2, "chicken", 3, "potatoes", "cheese", 4], 5) should return 
["cheese", 4].

2 个答案:

答案 0 :(得分:2)

为了未来读者的利益,解决这个问题的一种可能方法是:

function sliceFrom(sequence, n) {
    let result = [];

    for (let value of sequence)
        if (--n < 0)
            result.push(value);

    if (typeof sequence === 'string')
        return result.join('');

    return result;
}


console.log(sliceFrom('abcdefg', 3));
console.log(sliceFrom([11,22,33,44,55], 2));
console.log(sliceFrom([11,22,33,44,55], 100));

请注意,由于使用of循环,此“切片器”适用于任意序列(或更确切地说是“可迭代”值),包括那些没有.length属性的值(例如MapSet个对象。

从实际角度来看,内置方法Array.sliceString.slice在使用一个正参数调用时完全相同。但是,在处理“星体”字符时,我们的自制函数更好。表情符号:

function sliceFrom(sequence, n) {
    let result = [];

    for (let value of sequence)
        if (--n < 0)
            result.push(value);

    if (typeof sequence === 'string')
        return result.join('');

    return result;
}

faces = ""

console.log(faces.slice(1))        // not really
console.log(sliceFrom(faces, 1))   // looks fine

答案 1 :(得分:1)

检查该阵列的长度:

&#13;
&#13;
function slasher(arr, howMany) {
  return arr.slice(howMany);
}

console.log(slasher([1, 2, 3], 2)); // should return [3].
console.log(slasher([1, 2, 3], 0)); // should return [1, 2, 3].
console.log(slasher([1, 2, 3], 9)); // should return [].
console.log(slasher([1, 2, 3], 4)); // should return [].
console.log(slasher(["burgers", "fries", "shake"], 1)); // should return ["fries", "shake"].
console.log(slasher([1, 2, "chicken", 3, "potatoes", "cheese", 4], 5));// should return ["cheese", 4].
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;