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

我的数组是这样的:

array = [object {id: 1, value: "itemname"}, object {id: 2, value: "itemname"}, ...]

我的所有对象都具有相同的属性,但具有不同的值。

有没有一种简单的方法可以对该数组使用 WHERE 语句?

取其中 object.id = var 的对象

还是只需要遍历整个数组检查每一项?我的数组有超过100个条目,所以我想知道是否有更有效的方法

159729 次浏览

I'd use filter or reduce:

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


let item1 = array.filter(item => item.id === 1)[0];
let item2 = array.reduce((prev, current) => prev || current.id === 1 ? current : null);


console.log(item1); // Object {id: 1, value: "itemname"}
console.log(item2); // Object {id: 1, value: "itemname"}

(code in playground)

If you care about iterating over the entire array then use some:

let item;
array.some(i => {
if (i.id === 1) {
item = i;
return true;
}
return false;
});

(code in playground)

You'll have to loop over the array, but if you make a hashmap to link each id to an index and save that, you only have to do it once, so you can reference any objeft after that directly:

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


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

This does assume all ids are unique though.

Use Array.find:

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


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

Array.find at MDN: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find

You can search a certain value in array of objects using TypeScript dynamically if you need to search the value from all fields of the object without specifying column

 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()))
);

Same approach can be used to make a Search Filter Pipe in angularjs 4 using TypeScript

I had to declare the type to get it to work in typescript:

let someId = 1
array.find((i: { id: string; }) => i.id === someId)