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