首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用TypeScript查找数组项?(一种更现代、更简单的方式)

如何使用TypeScript查找数组项?(一种更现代、更简单的方式)
EN

Stack Overflow用户
提问于 2015-07-16 21:36:59
回答 5查看 140.7K关注 0票数 76

有没有一种用TypeScript在数组中查找项的规范方法?

ES6+支持这种简单/干净的方法

代码语言:javascript
复制
[{"id":1}, {"id":-2}, {"id":3}].find(myObj => myObj.id < 0)  // returns {"id":-2}

TypeScript实现了许多ES6+功能,并将继续这样做。它似乎至少有一个很好的解决方案,所以:

考虑到易用性、现代最佳实践和通过简单性实现的优雅,如何使用TypeScript在数组中找到项?

(稍微重复一下问题以寻求最佳方法)

备注

  • "item“可以是JavaScript对象,也可以是几乎任何其他对象。上面的例子恰好是查找普通的原生JS对象,但存在许多情况。

  • "canonical“只是计算机科学(和其他领域)中的一种奇特方式,用来表示”普遍接受的规则或标准公式“(请记住,这里的每个人在某些时候都不知道这一点)

  • This不是关于的新特性。任何版本的JS都可以做到这一点。然而,这样做的形式随着时间的推移而变得越来越不吸引人。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-07-16 22:52:48

第1部分-多边形填充

对于还没有实现它的浏览器,可以使用array.find的polyfill。Courtesy of MDN

代码语言:javascript
复制
if (!Array.prototype.find) {
  Array.prototype.find = function(predicate) {
    if (this == null) {
      throw new TypeError('Array.prototype.find called on null or undefined');
    }
    if (typeof predicate !== 'function') {
      throw new TypeError('predicate must be a function');
    }
    var list = Object(this);
    var length = list.length >>> 0;
    var thisArg = arguments[1];
    var value;

    for (var i = 0; i < length; i++) {
      value = list[i];
      if (predicate.call(thisArg, value, i, list)) {
        return value;
      }
    }
    return undefined;
  };
}

第二部分-接口

您需要扩展开放数组接口以包含find方法。

代码语言:javascript
复制
interface Array<T> {
    find(predicate: (search: T) => boolean) : T;
}

当它到达TypeScript时,编译器会给你一个警告,提醒你删除它。

第三部分-使用它

变量x将具有预期的类型...{ id: number }

代码语言:javascript
复制
var x = [{ "id": 1 }, { "id": -2 }, { "id": 3 }].find(myObj => myObj.id < 0);
票数 73
EN

Stack Overflow用户

发布于 2016-03-03 03:18:27

对于某些项目,在tsconfig.json中将目标设置为es6会更容易一些。

代码语言:javascript
复制
{
  "compilerOptions": {
    "target": "es6",
    ...
票数 14
EN

Stack Overflow用户

发布于 2016-05-23 22:51:49

使用tsconfig.json,您也可以像这样瞄准es5:

代码语言:javascript
复制
{
    "compilerOptions": {
        "experimentalDecorators": true,
        "module": "commonjs", 
        "target": "es5"
    }
    ...
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31455805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档