JS:创建一个方法来返回一个数组,该数组不包含传递给我的方法的数组中的索引值

我正在尝试创建一个添加到 Array.prototype 对象的方法。目标是返回一个数组,该数组不包含传递给我的方法的数组中的索引值。


以下是我的测试规格。


describe('doNotInclude', () => {

  it('the doNotInclude method is added to the Array.prototype object', () => {

    expect(typeof Array.prototype.doNotInclude).toBe('function');

  });

  it('returns an array', () => {

    expect(Array.isArray([1, 2, 3, 4].doNotInclude(3))).toBe(true);

    expect(Array.isArray([1, 2, 3, 4].doNotInclude([0, 2]))).toBe(true);

  });

  it('does not include the index values from the array passed to `doNotInclude`', () => {

    expect([1, 2, 3, 4, 5].doNotInclude([3, 4])).toEqual([1, 2, 3]);

    expect(

      ['zero', 'one', 'two', 'three', 'four', 'five', 'six'].doNotInclude([

        0,

        1,

      ])

    ).toEqual(['two', 'three', 'four', 'five', 'six']);

我的代码如下:


Array.prototype.doNotInclude = function (arr){

    return this.filter((elem, index) => {

      if (!arr.includes(index)){

        return elem; 

      }

    })

  }

我的代码没有通过任何规范。我究竟做错了什么?


还要检查我的概念理解,过滤器方法在哪个数组上运行?它是包含索引的那个吗?


POPMUISE
浏览 274回答 2
2回答

紫衣仙女

我假设您想要一个方法,该方法接受给定的数组并删除与作为参数传递的数组的值相匹配的值。该演示将返回值与传入的数组的值不匹配的数组的索引。这可以通过最新的数组方法实现,该方法.flatMap()本质上是.map()与.flat()方法相结合的。映射部分将在每个值上运行一个函数,.map()但不同的是每个返回值都是一个数组: array.map(function(x) { return x}); array.flatMap(function(x) { return [x]});如果你想删除一个值,你会返回一个空数组:  array.map(function(x) { return x}).filter(function(x) { return x !== z});   array.flatMap(function(x) { return x !== z ? [x] : []}); 通过使用三元控件,您可以直接删除值,而不是通过.filter().  if x does not equal z return [x] else return empty array []    return x !== z ? [x] : []然后将结果展平为普通数组。Array.prototype.exclude = function(array) {  return this.flatMap((value, index) => {    return array.includes(value) ? [] : [index];  })}let x = [1, 2, 3, 4, 5, 6, 7];let z = x.exclude([3, 4]);console.log(JSON.stringify(z));

白衣染霜花

1) 你不想return elem你想返回一个布尔值来指示是否elem应该包含或不包含。2)doNotInclude(3)表示arr可能不是数组。您必须检查Array.isArray(arr)并相应地更改逻辑(arr直接比较索引)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript