为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

POPMUISE 2021-06-15 17:05:39
我正在尝试创建一个添加到 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;       }    })  }我的代码没有通过任何规范。我究竟做错了什么?还要检查我的概念理解,过滤器方法在哪个数组上运行?它是包含索引的那个吗?
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

我假设您想要一个方法,该方法接受给定的数组并删除与作为参数传递的数组的值相匹配的值。该演示将返回值与传入的数组的值不匹配的数组的索引。这可以通过最新的数组方法实现,该方法.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));


查看完整回答
反对 回复 2021-06-18
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

1) 你不想return elem你想返回一个布尔值来指示是否elem应该包含或不包含。

2)doNotInclude(3)表示arr可能不是数组。您必须检查Array.isArray(arr)并相应地更改逻辑(arr直接比较索引)。


查看完整回答
反对 回复 2021-06-18
  • 2 回答
  • 0 关注
  • 273 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信