【问题标题】:How to take element from two json arrays in jquery如何从jquery中的两个json数组中获取元素
【发布时间】:2015-10-29 08:52:42
【问题描述】:
arr1 = [
    {Lattitude: '52,4043000', Location: 'a2', Longitude: '55,7181815'},
    {Lattitude: '52,3882320', Location: 'b2', Longitude: '55,7225500'},
    {Lattitude: '52,4041184', Location: 'c2', Longitude: '55,7172296'},
    {Lattitude: '52,3996194', Location: 'd2', Longitude: '55,7200249'},
];

arr2 = [
    {Lattitude: '52,3882320', Location: 'b2', Longitude: '55,7225500'},
    {Lattitude: '52,4041184', Location: 'c2', Longitude: '55,7172296'},
    {Lattitude: '52,3996194', Location: 'd2', Longitude: '55,7200249'}
];

我如何比较两个 json 数组 arr1,arr2 并获取这个元素 {Lattitude: '52,4043000', Location: 'a2', Longitude: '55,7181815'} 来自 arr1 而在 arr2 中没有

我会尽量这样做

     function objDiff(arr1, arr2) {
                    var resultArray = [];


for (var i = 0; i < arr1.length; i++) {
                        for (var j = 0; arr2.length; j++) {
          if (parseFloat(parseFloat(arr1[i].Lattitude).toFixed(4)) != parseFloat(parseFloat(arr2[i].Lattitude).toFixed(4)) &&
                                parseFloat(parseFloat(arr1[i].Longitude).toFixed(4)) != parseFloat(parseFloat(arr2[i].Longitude).toFixed(4))) {
                                resultArray.push(arr1[i]);
                            }
                        }
                    }

                    return resultArray;
                }

但我的功能不起作用,我不知道为什么

【问题讨论】:

    标签: javascript jquery json compare


    【解决方案1】:

    试试这个,

            function compareArr(arr1, arr2) {
                var longArray = arr1.length >= arr2.length ? arr1 : arr2;
                var shortArray = arr1.length < arr2.length ? arr1 : arr2;
    
                return resultArr = longArray.filter(function (v) {
                    return shortArray.filter(function (iv) {
                        return v.Lattitude === iv.Lattitude
                                && v.Location === iv.Location
                                && v.Longitude === iv.Longitude;
                    }).length === 0;
                });
            }
    
            var resultArr = compareArr(arr2, arr1);
    

    以任意顺序将两个数组传递给此函数,结果将相同。

    【讨论】:

    • 如果交换了变量的内容,这可能不起作用。不知道 OP 希望它是怎样的!
    • 这段代码的执行速度比 for 循环快 10 倍。
    • 你能为你的陈述提供理由吗? 快 10 倍试试这个:jsperf.com/javascript-array-filter-versus-loop
    • 您可以使用开始时间和结束时间进行比较。基于 filter() 或 map() 的迭代比 for 循环快 10 倍。自己试试吧。
    • 对不起,当我发送 compareArr(arr2, arr1); 时不起作用arr2 具有 50 个元素的 json 数据,arr1 具有 20 个元素的 json 数据。但是我的 20 个元素已经在 50 个元素中,所以你的函数不会返回我需要的 0 个元素/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多