我正在迭代标记数组并尝试过滤掉那些开放时间未定义的地方,但是,我无法过滤掉未定义的数据。下面是我的代码和结果:
const markers = data.map(place => {
if (typeof place. opening_now != 'undefined') {
return {
position: place.geometry.location,
content: place.name,
key: place.id,
opening_now: place.opening_now
};
}
(20) [undefined, {…}, {…}, undefined, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0:undefined
1:{position: _.F, content: "San Francisco Marriott Union Square", key: "c904f2aae3fb8743f27bce36da94753a19b02131", opening_now : {open_now: true, weekday_text: Array(0)}}
2:{position: _.F, content: "Cornell Hotel De France", key: "547ceb15210b70b8734500183410bb10c644c395", opening_now :{open_now: true, weekday_text: Array(0)}}
3:undefined
4:{position: _.F, content: "San Francisco Marriott Marquis", key: "f007d2f91c0070ebdfec60275baa33623f0b771b", opening_now: {…}}
5:{position: _.F, content: "La Mar Cebicheria Peruana", key: "2dfcc4cf449104804f979d0c74583f2b3a48d046", opening_now: {…}}..
最佳答案
输出数据中出现未定义
的原因是map
对数组中的每个元素进行操作。如果您的数组有 10 个元素长,则输出数组也将有 10 个元素长。在您的示例中,当您的 opening_hours
为 undefined
时,您只是返回 undefined
(即“无对象”)。
The map() method creates a new array with the results of calling a provided function on every element in the calling array.
所以 filter
解决方案非常整洁。它的工作方式与 map
相同,但仅返回满足您为函数指定的条件的元素。
ES6
const markers = data.filter(place => place.opening_now.open_now)
ES5(您可能更习惯)
var markers = data.filter(function (place) {
return place.opening_now.open_now;
});
它会删除您在数组中出现的未定义
间隙。在本示例中,由于您没有明确表达 undefined
,因此也会删除营业时间等于 null
的实例(如果这是您的包)。
<强> DEMO
关于javascript - 过滤掉未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641790/