Underscore.js _.map 函数:跳过一个值
Underscore.js _.map function : skip a value
我正在尝试对对象数组使用 underscore.js _.map
函数,以获取每个对象具有 属性 的数组。这是通常的情况,所以 :
var finalArray = _.map(myArray, function(obj) {
return obj.myProperty;
});
但在某些情况下,我需要在数组中添加 nothing。它可能是这样的:
var finalArray = _.map(myArray, function(obj) {
if (!obj.ignore) {
return obj.myProperty;
}
});
这样做的结果是 undefined
值被推入数组,这与根本没有推入任何东西是不一样的。
有没有办法让 map 函数不推送值,或者我是否需要 post- 处理我的 finalArray
以删除不需要的 undefined
?
你应该在 _.map()
之前使用 _.filter()
var filteredArray = _.filter(myArray,function(obj) {
return !obj.ignore;
});
var finalArray = _.map(filteredArray, function(obj) {
return obj.myProperty;
});
所以这意味着您要过滤,然后映射您的数组。
要以 underscore
方式执行此操作,您需要将数组传递到此管道中:
myArray --> filter --> map --> finalArray
var isIncluded = function(obj){
return !obj.ignore
}
var takeProperty = function(obj){
return obj.myProperty
}
var finalArray = _.map( _.filter(myArray, isIncluded), takeProperty );
.map
会映射出一个新的值给数组,可以用.filter
来过滤数组。仅供参考,您可以使用 .pluck
从对象映射 属性:
_.chain(myArray).filter(function(obj) { return !obj.ignore; }).pluck('myProperty').value();
你也可以这样使用.where
:
_.chain(myArray).where({ignore: false}).pluck('myProperty').value();
或:
_.pluck(_.where(myArray, {ignore: false}), 'myProperty');
你可以使用 reduce:
myArray.reduce(function (acc, obj) {
if (!obj.ignore) {
acc.push(obj.myProperty);
}
return acc;
}, []);
或使用 lodash:
_.reduce(myArray, function (acc, obj) {
if (!obj.ignore) {
acc.push(obj.myProperty);
}
return acc;
}, []);
这可以单独使用 Underscore 方法来完成,points-free style:
var finalArray = _.chain(myArray)
.reject('ignore')
.pluck('myProperty')
.value();
这是另一种方式。这个使用了下划线中的 compose 函数。为什么作曲? compose 得到数学范畴论的支持。这种方式也是免分的。
var pluckMyProp = function(array) {
return _.pluck(array, 'myProperty')
}
var reject = function(array) {
return _.reject(array, function(element) {
return element['ignore'] === true
})
}
var finalArray = _.compose(pluckMyProp, reject)
var data = [{myProperty: 1, ignore: false}, {ignore: true}, {myProperty: 2}]
finalArray(data) //=> [1,2]
尝试使用 lodash 的 compact()
。它创建一个删除了所有错误值的数组。因此,值 false
、null
、0
、""
、undefined
和 NaN
被删除。
https://lodash.com/docs#compact
我正在用它——非常干净。
我正在尝试对对象数组使用 underscore.js _.map
函数,以获取每个对象具有 属性 的数组。这是通常的情况,所以 :
var finalArray = _.map(myArray, function(obj) {
return obj.myProperty;
});
但在某些情况下,我需要在数组中添加 nothing。它可能是这样的:
var finalArray = _.map(myArray, function(obj) {
if (!obj.ignore) {
return obj.myProperty;
}
});
这样做的结果是 undefined
值被推入数组,这与根本没有推入任何东西是不一样的。
有没有办法让 map 函数不推送值,或者我是否需要 post- 处理我的 finalArray
以删除不需要的 undefined
?
你应该在 _.map()
之前使用 _.filter()var filteredArray = _.filter(myArray,function(obj) {
return !obj.ignore;
});
var finalArray = _.map(filteredArray, function(obj) {
return obj.myProperty;
});
所以这意味着您要过滤,然后映射您的数组。
要以 underscore
方式执行此操作,您需要将数组传递到此管道中:
myArray --> filter --> map --> finalArray
var isIncluded = function(obj){
return !obj.ignore
}
var takeProperty = function(obj){
return obj.myProperty
}
var finalArray = _.map( _.filter(myArray, isIncluded), takeProperty );
.map
会映射出一个新的值给数组,可以用.filter
来过滤数组。仅供参考,您可以使用 .pluck
从对象映射 属性:
_.chain(myArray).filter(function(obj) { return !obj.ignore; }).pluck('myProperty').value();
你也可以这样使用.where
:
_.chain(myArray).where({ignore: false}).pluck('myProperty').value();
或:
_.pluck(_.where(myArray, {ignore: false}), 'myProperty');
你可以使用 reduce:
myArray.reduce(function (acc, obj) {
if (!obj.ignore) {
acc.push(obj.myProperty);
}
return acc;
}, []);
或使用 lodash:
_.reduce(myArray, function (acc, obj) {
if (!obj.ignore) {
acc.push(obj.myProperty);
}
return acc;
}, []);
这可以单独使用 Underscore 方法来完成,points-free style:
var finalArray = _.chain(myArray)
.reject('ignore')
.pluck('myProperty')
.value();
这是另一种方式。这个使用了下划线中的 compose 函数。为什么作曲? compose 得到数学范畴论的支持。这种方式也是免分的。
var pluckMyProp = function(array) {
return _.pluck(array, 'myProperty')
}
var reject = function(array) {
return _.reject(array, function(element) {
return element['ignore'] === true
})
}
var finalArray = _.compose(pluckMyProp, reject)
var data = [{myProperty: 1, ignore: false}, {ignore: true}, {myProperty: 2}]
finalArray(data) //=> [1,2]
尝试使用 lodash 的 compact()
。它创建一个删除了所有错误值的数组。因此,值 false
、null
、0
、""
、undefined
和 NaN
被删除。
https://lodash.com/docs#compact
我正在用它——非常干净。