Javascript TypeScript-根据属性值将对象从数组中取出

Javascript TypeScript-根据属性值将对象从数组中取出,javascript,arrays,typescript,Javascript,Arrays,Typescript,我的数组如下所示: array = [object {id: 1, value: "itemname"}, object {id: 2, value: "itemname"}, ...] 我的所有对象都具有相同的姿态,但具有不同的值 是否有一种简单的方法可以为该数组使用WHERE语句 以object.id=var的对象为例 还是我只需要在整个数组中循环并检查每个项目?我的数组有100多个条目,所以我想知道是否有更有效的方法,或者: () 如果您关心迭代整个数组,请使用: ()您必须在数组上循环

我的数组如下所示:

array = [object {id: 1, value: "itemname"}, object {id: 2, value: "itemname"}, ...]
我的所有对象都具有相同的姿态,但具有不同的值

是否有一种简单的方法可以为该数组使用WHERE语句

以object.id=var的对象为例

还是我只需要在整个数组中循环并检查每个项目?我的数组有100多个条目,所以我想知道是否有更有效的方法,或者:

()

如果您关心迭代整个数组,请使用:


()

您必须在数组上循环,但是如果您制作一个hashmap将每个id链接到一个索引并保存该索引,您只需执行一次,因此您可以直接引用之后的任何对象:

var idReference = myArray.reduce(function( map, record, index ) {
    map[ record.id ] = index;
    return map;
}, {});

var objectWithId5 = myArray[ idReference["5"] ];

但这确实假设所有ID都是唯一的。

使用
数组。查找:

let array = [
    { id: 1, value: "itemname" },
    { id: 2, value: "itemname" }
];

let item1 = array.find(i => i.id === 1);

Array.find at MDN:

如果需要从对象的所有字段中搜索值而不指定列,则可以使用TypeScript动态搜索对象数组中的某个值

 var searchText = 'first';

let items = [
            { id: 1, name: "first", grade: "A" },
            { id: 2, name: "second", grade: "B" }
        ];

This below code will search for the value

var result = items.filter(item => 
             Object.keys(item).some(k => item[k] != null && 
             item[k].toString().toLowerCase()
             .includes(searchText.toLowerCase()))
             );
同样的方法也可以用于在angularjs 4中使用下面的TypeScript使搜索过滤管道对我有效

let array = [
    { id: 1, value: "itemname" },
    { id: 2, value: "itemname" }
];

let item1 = array.find(i => i.id === 1);

数组有一个find()方法,它返回第一个实例@JánHalaša True,我忘了这个,你应该把它作为一个答案发布。我投赞成票。使用filter()仍然是一种更好的方法,因为它将捕获属性相同值的多个实例。您可以检查长度以确保只有1个实例。有一个Map类可用于确定更高效的数据结构。期待我们升级到IE Edge或决定使用Modernizer后使用它。Reduce和类似的方法得到了更广泛的支持。但是,引用每个对象的代码可能更长,因为您将使用.get()来引用它。不过对于OP来说,这并不重要,因为它无论如何都会编译成这种结构。谢谢,这个解决方案是最干净的,而且很有效!
 var searchText = 'first';

let items = [
            { id: 1, name: "first", grade: "A" },
            { id: 2, name: "second", grade: "B" }
        ];

This below code will search for the value

var result = items.filter(item => 
             Object.keys(item).some(k => item[k] != null && 
             item[k].toString().toLowerCase()
             .includes(searchText.toLowerCase()))
             );
let array = [
    { id: 1, value: "itemname" },
    { id: 2, value: "itemname" }
];

let item1 = array.find(i => i.id === 1);