【问题标题】:JavaScript: Add Method to Array.prototype Object to Exclude Index Values from an Input ArrayJavaScript:向 Array.prototype 对象添加方法以从输入数组中排除索引值
【发布时间】:2019-07-17 00:27:31
【问题描述】:

我想编写将 doNotInclude 方法添加到 Array.prototype 对象的代码。

我的代码的目的是:不包括从数组中传递给doNotInclude 的索引值。

代码如下:

Array.prototype.doNotInclude = function (arr) {
  //if (!Array.isArray(arr)) arr = [arr];
  return this.filter((val, i) => {
    if (!arr.includes(i)) return val;
  });
};

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

我的代码执行成功并返回:

[ 'two', 'three', 'four', 'five', 'six' ]

我的问题是下面这行代码在做什么?

//if (!Array.isArray(arr)) arr = [arr];

在我的示例中,将其注释掉似乎不会影响输出,所以我很好奇在什么情况下我需要那行代码?

【问题讨论】:

  • 对于像doNotInclude(1)这样的单个索引参数
  • 那个过滤器不对...应该返回布尔值
  • 一个小技巧——filter() 的回调应该返回一个布尔值。所以你可以只返回包含的结果:return this.filter((val, i) => !arr.includes(i)); 现在它也过滤掉了 0 和其他任何虚假的内容,无论索引如何。

标签: javascript arrays function object prototype


【解决方案1】:

基本上,它会检查您的输入是否为数组,如果不是,则将其变为单个元素数组。

这是因为代码的逻辑要求输入是一个数组,因为它使用了Array.includes()。如果您的输入始终是数组,则此行将永远不会执行,因此从技术上讲这不是必需的,但它可以让您通过

1

还有

[1]

不会出错。

【讨论】:

    【解决方案2】:

    代码if (!Array.isArray(arr)) arr = [arr]; 只是一个保障措施。它将参数arr 转换为一个数组,如果它还不是一个数组。换句话说,这段代码启用了以下行为:

    ['zero', 'one', 'two'].doNotInclude(0) // Notice that the number is passed
    

    如果没有这种保护措施,上面的代码就会失败。示例:

    // 1. With safeguard
    Array.prototype.doNotInclude = function (arr) {
      if (!Array.isArray(arr)) arr = [arr];
      return this.filter((val, i) => {
        if (!arr.includes(i)) return val;
      });
    };
    
    console.log(['zero', 'one', 'two'].doNotInclude(0)); // executes normally
    
    // 2. Without safeguard
    Array.prototype.doNotInclude = function (arr) {
      //if (!Array.isArray(arr)) arr = [arr];
      return this.filter((val, i) => {
        if (!arr.includes(i)) return val;
      });
    };
    
    console.log(['zero', 'one', 'two'].doNotInclude(0)); // fails

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2023-02-22
      • 2014-04-18
      • 1970-01-01
      相关资源
      最近更新 更多