如何通过 属性 return 可观察数组中的项目

How to return an item from an observable array by property

我有这个代码:

var id = event.target.getAttribute('id');

var matchedItem = ko.utils.arrayForEach(self.ProductEffectImagesToMatch(),
  function(item) {
    if (item.index == id) {
      return item;
    }
  }
);

我想通过数组中的 index 获取项目,如果 index 匹配 id 那么 return 项目。

如何正确完成?

如果只有一项,你可以使用ko.utils.arrayFirst,如果很少,你可以使用arrayFilter

var matchedItem = ko.utils.arrayFirst(self.ProductEffectImagesToMatch(), function (item) {
    return item.index == id;
});

"ko.utils." 是不必要的。如果 "self.ProductEffectImagesToMatch" 是一个可观察数组,那么 "self.ProductEffectImagesToMatch()" returns 普通数组,你可以通过谓词过滤:

var matchedItem = self.ProductEffectImagesToMatch().filter(function (item) {
    return item.index == id;
})[0];

[0] returns 如果结果为空,则为未定义,否则为第一个匹配项。

更新

如果要获取数组的第n个元素,可以使用"id"作为索引:

matchedItem = self.ProductEffectImagesToMatch()[id];