从JavaScript ES5中的数组获取未定义的项

时间:2019-07-04 15:05:49

标签: javascript jquery arrays ecmascript-5

我正在以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

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

2 个答案:

答案 0 :(得分:2)

使用对象代替:

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>

答案 1 :(得分:1)

只需使用数组自己的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>