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

时间:2017-03-03 13:25:02

标签: javascript arrays typescript

我的数组看起来像这样:

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

我的所有物品都具有相同的属性,但具有不同的值。

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

  

获取object.id = var

的对象

或者我只需要遍历整个阵列并检查每个项目?我的阵列有超过100个条目,所以我想知道是否有更有效的方式

5 个答案:

答案 0 :(得分:63)

使用Array.find

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

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

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

答案 1 :(得分:4)

我使用filterreduce

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

答案 2 :(得分:2)

你必须循环遍历数组,但是如果你创建一个hashmap来将每个id链接到一个索引并保存它,你只需要做一次,所以你可以直接引用任何一个objeft:

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

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

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

答案 3 :(得分: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中创建搜索过滤器管道

答案 4 :(得分:0)

以下为我工作。

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

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