TypeScript - 根据属性值从数组中取出对象
Posted
技术标签:
【中文标题】TypeScript - 根据属性值从数组中取出对象【英文标题】:TypeScript - Take object out of array based on attribute value 【发布时间】:2017-07-23 15:15:18 【问题描述】:我的数组如下所示:
array = [object id: 1, value: "itemname", object id: 2, value: "itemname", ...]
我所有的对象都具有相同的属性,但具有不同的值。
有没有一种简单的方法可以为该数组使用 WHERE 语句?
取object.id = var的对象
还是我只需要遍历整个数组并检查每个项目?我的数组有超过 100 个条目,所以我想知道是否有更有效的方法
【问题讨论】:
【参考方案1】:我必须声明类型才能让它在打字稿中工作:
let someId = 1
array.find((i: id: string; ) => i.id === someId)
【讨论】:
【参考方案2】:如果您需要在不指定列的情况下从对象的所有字段中搜索值,您可以使用 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()))
);
同样的方法可用于使用 TypeScript 在 angularjs 4 中制作搜索过滤器管道
【讨论】:
【参考方案3】:使用Array.find
:
let array = [
id: 1, value: "itemname" ,
id: 2, value: "itemname"
];
let item1 = array.find(i => i.id === 1);
Array.find 在 MDN:https://developer.mozilla.org/en/docs/Web/javascript/Reference/Global_Objects/Array/find
【讨论】:
谢谢,这个解决方案最干净而且有效!【参考方案4】:您必须循环遍历数组,但是如果您制作一个哈希映射来将每个 id 链接到一个索引并保存它,您只需执行一次,因此您可以直接引用之后的任何对象:
var idReference = myArray.reduce(function( map, record, index )
map[ record.id ] = index;
return map;
, );
var objectWithId5 = myArray[ idReference["5"] ];
这确实假设所有 id 都是唯一的。
【讨论】:
有一个 Map 类可用于制作更高效的数据结构developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 肯定。期待在我们升级到 IE Edge 或决定使用 modernizr 后使用它。 Reduce等得到更广泛的支持。不过,引用每个对象的代码可能会更长,因为您将使用 .get() 。对于不会遮罩的 OP,因为无论如何它都会编译成这种结构。【参考方案5】:我会使用filter 或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)
如果您关心迭代整个数组,请使用some:
let item;
array.some(i =>
if (i.id === 1)
item = i;
return true;
return false;
);
(code in playground)
【讨论】:
Array 有一个 find() 方法返回第一次出现的developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… @JánHalaša 没错,我忘了那个,你应该把它作为答案发布。我会投票给它。 使用 filter() 仍然是一种更好的方法,因为它会捕获属性相同值的多个实例。您可以检查长度以确保只有 1 个实例。以上是关于TypeScript - 根据属性值从数组中取出对象的主要内容,如果未能解决你的问题,请参考以下文章