【问题标题】:Get not undefined items from array in javascript ES5从javascript ES5中的数组中获取未定义的项目
【发布时间】:2019-07-04 15:05:49
【问题描述】:

我正在从服务器端以 JSON 格式检索项目列表,并将它们存储到 javascript 数组中。从服务器检索的项目列表可以包含重复元素,但我需要 javascript 数组只包含唯一元素。

为了做到这一点,我使用每个项目中的id 字段(一个整数值)作为数组索引,这样我可以通过检查数组值来检查该项目是否已经在数组中那个位置。

由于生成的数组只能包含索引 0 和 5 处的元素(只是一个示例),我在使用 jQuery 的 $.each() 方法迭代它时遇到了问题,因为它遍历了从 0 到 5 的每个数组位置, 是undefined 位置 1-4 中的值。

我当然可以在遍历时检查该项目是否未定义,但我想知道是否有一些本机或直接的方法可以从那些未定义的位置获取数组的值。

var x = [];
x[0] = "some value";
x[5] = "another value";

$.each(x, function(index, value) {
   console.log(index + " - " + value);    
});

// This results in:
// 0 - some value
// 1 - undefined
// 2 - undefined
// 3 - undefined
// 4 - undefined
// 5 - another value

我也接受以不同方式执行此过程的建议,而不是使用项目 ID 作为数组索引来检查唯一性。

【问题讨论】:

    标签: javascript jquery arrays ecmascript-5


    【解决方案1】:

    改用一个对象:

    var x = {};
    x[0] = "some value";
    x[5] = "another value";
    
    $.each(x, function(key, value) {
      console.log(key + " - " + value);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    【讨论】:

    • 如果他们不需要任何其他数组功能,则为合理的解决方案。
    【解决方案2】:

    只需使用数组自己的forEach,它会跳过不存在的条目:

    var x = [];
    x[0] = "some value";
    x[5] = "another value"
    x.forEach(function(value, index) {
        console.log(index + " - " + value);
    });

    注意回调的参数顺序是颠倒的。

    如果你真的想使用$.each,请检查该属性是否存在:

    var x = [];
    x[0] = "some value";
    x[5] = "another value"
    $.each(x, function(index, value) {
        if (x.hasOwnProperty(index)) {
            console.log(index + " - " + value);
        }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2022-12-12
      • 2020-08-01
      • 2015-07-11
      • 2017-06-14
      • 2017-04-10
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      相关资源
      最近更新 更多