在函数中使用 .includes 方法

新手上路,请多包涵

我有一个对象 jsonRes[0] 包含需要根据条件删除的值。以下工作用于删除 null 、缺失值和字符串化对象中等于零的值:

 function replacer(key, value) {
          // Filtering out properties
          if (value === null || value === 0 || value === "") {
            return undefined;
          }
          return value;
        }

JSON.stringify(jsonRes[0], replacer, "\t")

但是,当我使用 includes 方法添加条件时,我收到错误消息:

 function replacer(key, value) {
          // Filtering out properties
          if (value === null || value === 0 || value === "" || value.includes("$")) {
            return undefined;
          }
          return value;
        }

Uncaught TypeError: value.includes is not a function

为什么会这样,是否有解决方法?

原文由 the_darkside 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
2 个回答

您可以使用 String.indexOf() 而不是 String.includes ,因为它在 ES6 中可用,而在 IE 中根本不支持。

 typeof value == "string" && value.indexOf('$') > -1

另请注意,如果 value 不是字符串类型,它仍会引发错误 booleanNumber 不是该方法。您可以使用 typeof 来验证 value 是否是一个字符串。

原文由 Satpal 发布,翻译遵循 CC BY-SA 3.0 许可协议

.includes() API 是 StringArray 数据类型的一部分。

因此,错误试图告诉您的是变量 value 的值(例如整数或对象)不具有属性 .includes

你可以像这样检查

  1. typeof a_string === 'string'
  2. an_array instanceof Array

.includes() api 之前防止这种情况。

显然,由于您拥有的支票数量,这会使您的 if 语句变得相当难看。

根据您编写代码的方式,我怀疑您对检查“字符串”比对数组更感兴趣。所以要 小心 数组。如果它是数组,您的代码可能无法正常工作。

无论如何,这是您的代码的折射版本。

 function replacer(key, value) {
   // Filtering out properties
   if (!value || typeof value === "string" && value.includes("$")) {
        return undefined;
   }
   return value;
 }

console.log("NULL returns:" + replacer('test', null));
console.log("$Test returns:" + replacer('test', '$test'));
console.log("Blah returns:" + replacer('test', 'Blah'));

原文由 Samuel Toh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题