Javascript 将函数赋值给数组对象,该数组对象使用";这";
我的控制器中有一个名为Javascript 将函数赋值给数组对象,该数组对象使用";这";,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我的控制器中有一个名为myList的对象数组 我想要一个干净的方法来检查对象数组是否已经有一个具有特定id的对象 对象结构如下所示: myList: [ { id: <integer>, . . . }, ... ] 现在,稍后在我的代码中,在控制器的其他位置: function onInit() { $log.debug(ctrl); ctrl.myList.includes
myList
的对象数组
我想要一个干净的方法来检查对象数组是否已经有一个具有特定id的对象
对象结构如下所示:
myList: [
{
id: <integer>,
.
.
.
},
...
]
现在,稍后在我的代码中,在控制器的其他位置:
function onInit() {
$log.debug(ctrl);
ctrl.myList.includes = function(id) {
var found = false;
for (var index=0; index < this.length; index++) {
if (this[index].id === id) {
found = true;
break;
}
}
return found;
}
}
if (!ctrl.myList.includes(id) {
// Do something...
}
在我分配给myList
的includes
函数中,使用this
关键字是否正确?
控制台没有抛出任何错误-因此从语法上来说这是正确的,但它不工作。
也许有更好的办法来做这件事
谢谢。没有必要重新发明轮子。
使用
some()
方法测试数组中是否至少有一个元素通过了所提供函数实现的测试
您可以使用
Array.prototype
高阶函数并以链式函数的方式编写它,函数includeId(id){return!!ctrl.myList.find(item=>item.id==id);}
较新的浏览器已经有了一个方法。@Andreas-我需要支持较旧的浏览器版本。多旧<代码>数组.prototype.some()也受IE9@Andreas由于Array.prototype.includes
仅查找具有基元值的平面数组,因此不能在此处使用它。简单的数组.prototype.find有什么问题?
if (!ctrl.myList.some(function(element) { return element.id === id; }) {
// Do something...
}