2017-05-08 22 views
2

Write a function called "removeElement".如何返回包含与JavaScript中的给定参数不匹配的元素的数组?

Given an array of elements, and a "discarder" parameter, "removeElement" returns an array containing the items in the given array that do not match the "discarder" parameter.

Notes: * If all the elements match, it should return an empty array. * If an empty array is passed in, it should return an empty array.

我认为这将是解决办法:

function removeElement(array, discarder) { 

    var newarr = array.filter(function(cv, i, a){ 
     if (array == []) { 
     return []; 
     } else if (cv != discarder) { 
     return cv; 
     } 
    }); 
     return newarr; 
    } 

但我得到这个错误:

return_an_array_with_all_booleans_not_matching_discarder return an array with all booleans not matching discarder

我想那么这会的工作,因为最初我并没有在条款添加到如果所有数值都等于discarder,则为因数。

function removeElement(array, discarder) { 

    var newarr = array.filter(function(cv, i, a){ 
     if ((array == []) || (cv == discarder)) { // added this expression to evaluate. 
     return []; 
     } else if (cv != discarder) { 
     return cv; 
     } 
    }); 
     return newarr; 
    } 
+0

array.filter应该返回布尔型 – bhspencer

+0

1.'array == []'将始终为false。 2.返回'[]'将被'filter()'函数解释为'true',这意味着当前项不会被排除在结果之外。 –

回答

4

虽然Array#filter

The filter() method creates a new array with all elements that pass the test implemented by the provided function.

需要一个布尔值(或至少是truthy/falsy)要返回的值,你可以只返回给定discarder检查并返回比较结果。

结果是一个没有给定值的数组。

function removeElement(array, discarder) { 
    return array.filter(function(value) { 
     return value !== discarder; 
    }); 
} 
+1

啊我认为我忽略了有关过滤器文档中的'boolean'的组件。看起来我太过于直截了当地认为,如果当前值没有通过测试,就足以让我们返回cv ... –

相关问题