Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript数组基于id查找值_Javascript_Arrays - Fatal编程技术网

javascript数组基于id查找值

javascript数组基于id查找值,javascript,arrays,Javascript,Arrays,我有一个json对象数组: [ {id:0, name:'A'}, {id:1, name:'B'}...{id:n, name:'N'} ] 如何在不迭代数组的情况下,基于给定id获取值(名称)?可能使用映射或某些过滤方法… const arr=[{id:0,名称:'A'},{id:1,名称:'B'},{id:3,名称:'N'}]; 常量inputId=1; const foundObj=arr.find(({id})=>id==inputId); if(foundObj)console.l

我有一个json对象数组:

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

如何在不迭代数组的情况下,基于给定id获取值(名称)?可能使用映射或某些过滤方法…

const arr=[{id:0,名称:'A'},{id:1,名称:'B'},{id:3,名称:'N'}];
常量inputId=1;
const foundObj=arr.find(({id})=>id==inputId);

if(foundObj)console.log(foundObj.name)此查找方法将根据对象属性和值查找对象

ArrayName.find(x => x.id === 0);
let数组=[{id:0,名称:'A'},{id:1,名称:'B'},{id:'n',名称:'n'}]
//要在数组中搜索,我们必须迭代。但如果您想优化多个搜索的性能,您可以将其映射到id为的对象。
让map=array.reduce((acc,element)=>{acc[element.id]=element;返回acc;},{})
console.log(映射[0])
console.log(映射[1])

console.log(map.n)//因为n被用作id。
当您想在集合中查找元素时,数组可能不是最佳选择,在这种情况下对象或映射更好

每次您必须找到一个元素时,您必须在数组上迭代,这将花费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;
进行一次迭代来构造

//输入。
常量输入=[{id:0,名称:'A'},{id:1,名称:'B'},{id:13,名称:'N'}]
//绘制地图。
常量toMap=(A)=>新映射(A.Map(x=>[x.id,x]))
//输出。
常量输出=toMap(输入)
//证明。
console.log(output.get(0))
console.log(output.get(1))

console.log(output.get(13))
“不迭代数组?可能使用map或某些筛选方法…”。你也需要迭代,你必须迭代,这是任何形式的搜索函数都要做的。否则就不要把它们放在数组中。数组是javascript中的对象。我的意思是将它们转换成ds,ds通过键映射值。谢谢,我已经做了编辑。我的意思是
对数组的查找不需要线性时间O(n)
纠正了这一部分