Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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 处理从对象数组中抓取对象的更好方法?_Javascript_Jquery - Fatal编程技术网

Javascript 处理从对象数组中抓取对象的更好方法?

Javascript 处理从对象数组中抓取对象的更好方法?,javascript,jquery,Javascript,Jquery,我有一个JSON对象,比如说,数组中有500个对象。目前,为了找到我想要的,我使用jQuery的“each”并将每个对象的id与我要查找的id进行比较,如下所示: var desiredID = 500; $.each(myObj.arrayOfObjects, function(k, oneObject){ if((oneObject.lineid * 1) === (desiredID * 1)){ // hooray! I have found my object

我有一个JSON对象,比如说,数组中有500个对象。目前,为了找到我想要的,我使用jQuery的“each”并将每个对象的id与我要查找的id进行比较,如下所示:

var desiredID = 500;
$.each(myObj.arrayOfObjects, function(k, oneObject){
    if((oneObject.lineid * 1) === (desiredID * 1)){
        // hooray! I have found my object
    }
});
有没有更好、更有效的方法?对象的数组可能会变得非常大

(在本例中,我使用的是jQuery,但也可能是vanilla javascript。)

对于vanilla js:

const obj = arrayOfObjects.find(({ lineid }) => lineid === desiredID)
如果要将字符串转换为数字,请使用以下步骤:

         +'1' === 1 // true
        ~~'1' === 1 // true
  Number('1') === 1 // true
parseInt('1') === 1 // true
对于欲望,你不必投,因为你知道它是数字

myObj.mappedObjects = myObj.arrayOfObjects.reduce((r, e) => {
    r[+e.lineid] = e;
    return r;
}, {});

var desiredID = 500;
myObj.mappedObjects[desiredID];
考虑到您提到的可能有500个元素,如果可能需要重复查找元素,我建议将数组转换为映射,以便快速查找id


如果端点,或者在任何地方,您正在获取原始数据,可以将其以该格式开始,甚至更好。

,如果您不需要IE支持的话。如果你这样做了,我肯定在某些地方会有一个polyfill。你也可以使用普通的javascript获得类似的结果:
myObj.arrayOfObjects.find(oneObject=>(oneObject.lineid*1)==(desiredID*1))
但是,从数据模型的角度来看,你可能会认为如果元素有一个“id”,它们可能更好地表示为一个映射。然后id查找是超级容易的边注释;也不完全确定为什么要将
desiredID
乘以1…@Taplar我打赌这是从字符串转换为int。为了我自己的教育,Array.find()比编写自己的循环并检查每个循环效率高吗?如果是的话,为什么?这取决于它的大小,但在大多数情况下是不存在的。。。因此,对于特定大小的阵列,它的效率更高,然后随着阵列的增长,它不再是更快的方式了?或者相反?现在它还取决于您编写的搜索算法,如果它只是“for”是相同的,那么请记住,如果您在找到要查找的内容后没有跳出for循环,那么each将在找到每个元素后对其进行求值,其中a
find()
将在第一次匹配时立即停止如果您在object中查找一次,那么“减少”将比“查找”消耗更多的时间@Chris也许您错过了我关于重复的评论?对不起,我没有注意