javascript数组根据id查找值

时间:2018-04-01 06:20:20

标签: javascript arrays

我有一个json对象数组:

[ {id:0, name:'A'}, {id:1, name:'B'}...{id:n, name:'N'} ]

如何在不迭代数组的情况下获取基于给定id的值(名称)?也许使用地图或一些过滤方法...

5 个答案:

答案 0 :(得分:2)



const arr = [ {id:0, name:'A'}, {id:1, name:'B'},{id:3, name:'N'} ];
const inputId = 1;

const foundObj = arr.find(({ id }) => id === inputId);
if (foundObj) console.log(foundObj.name);




这仍然会在内部迭代数组(但任何方法都会如此)。

答案 1 :(得分:1)

此find方法将根据您的对象属性和值查找对象。

ArrayName.find(x => x.id === 0);

答案 2 :(得分:1)

let array = [ {id:0, name:'A'}, {id:1, name:'B'}, {id:'n', name:'N'} ]
//To search in array we must iterate. But if you want to optimise performance for multiple searches you can map it to object by id.

let map = array.reduce((acc,element)=>{acc[element.id]=element;return acc;},{})

console.log(map[0])
console.log(map[1])
console.log(map.n) //As n was used as id.

答案 3 :(得分:1)

当你想在集合中找到一个元素时,数组可能不是最佳选择,在这种情况下,对象或地图会更好。

每次你必须找到一个元素时,你必须遍历数组,这需要花费O(n)时间。

为避免这种情况,您可以在中间放置一个API图层,将您的数组转换为一个数据结构,该结构通过唯一键映射值。您可以通过简单的Javascript对象实现此目的。

这样你就可以在O(1)中通过id找到你的元素而不需要任何迭代。

//original data
let arr = [ {id:0, name:'A'}, {id:1, name:'B'}, {id:2, name:'N'} ];

//convert it into object
let obj = arr.reduce((acc, curr) => {
    acc[curr.id] = curr;
    return acc;
}, {});

//modified data
{ 0: { id: 0, name: 'A' },
  1: { id: 1, name: 'B' },
  2: { id: 2, name: 'N' } }

//Now, you can look up value on any id as 
obj[id].name;

答案 4 :(得分:1)

Maps进行一次迭代构建。 Value retrieval thereon is sublinear.

// Input.
const input = [{id: 0, name:'A'}, {id: 1, name:'B'}, {id: 13, name:'N'}]

// To Map.
const toMap = (A) => new Map(A.map(x => [x.id, x]))

// Output.
const output = toMap(input)

// Proof.
console.log(output.get(0))
console.log(output.get(1))
console.log(output.get(13))