IE的Array.prototype.find()替代方法

8
我之前写了一些代码,用于匹配上传的文件与相应的客户ID,并以表格方式显示文件分配给哪个客户。问题在于我按照工作规范在Chrome和Safari上进行了测试,这两个浏览器都可以正常工作,但是在IE上无法运行,因为它不支持Array.prototype.find()方法。现在他们要求兼容IE。
我已经查看了其他类似问题,但答案都是特定情况下的解决方法,通常会给出其他实现目标的示例。
那么,有什么最好的方法可以实现我所需的功能呢?
var item = clientList.find(function(item) {

    return item.UniqueID == ClientID;

});

3
MDN网站上有一个关于Array.find()的Polyfill。 - Heretic Monkey
@MikeMcCaughan 我之前看过那个,但是我不确定如何使用它。我已经尝试将其放入代码中,但仍然出现相同的错误。 - user2924019
请编辑您的问题以展示您已经尝试过什么。在使用代码之前,您必须将其放入其中。 - Heretic Monkey
@MikeMcCaughan 谢谢。我刚发现客户把服务器换了,所以一直在尝试在旧服务器上让它工作! - user2924019
1个回答

11

你可以创建自己的查找函数,重要的部分是在匹配元素时打破循环。

var data = [{id: 1, name: 'a'}, {id: 2, name: 'b'}];

function altFind(arr, callback) {
  for (var i = 0; i < arr.length; i++) {
    var match = callback(arr[i]);
    if (match) {
      return arr[i];
    }
  }
}

var result = altFind(data, function(e) {
  return e.id == 2;
})

console.log(result)


除非你正在 polyfilling 一个现有的 API,否则不要扩展内置原型。 - Jon Koops
@Jon Koops 我更新了我的答案。 - Nenad Vracar
为什么要自己编写代码,当已经有一个(正确、经过测试、符合规范)的 polyfill 可以直接使用呢? - Bergi
@Bergi OP说他无法让polyfill正常工作,我想提供更简单的解决方案。 - Nenad Vracar
1
@NenadVracar 你好,谢谢你的回答,我已经测试过了,它很有效。非常有帮助。关于 polyfill,现在也可以工作了,我之前上传到了错误的服务器。唉! - user2924019
@NenadVracar 今天你救了我的命。谢谢。 - Evik Ghazarian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接