在 underscore.js 中更改地图的结果
Alter result for map in underscore.js
因为 map 将 return "undefined" 用于不匹配的元素,什么是 return 只有匹配的元素的最佳方法?
let items: string[] = ["false", "false", "true"];
let newItems: string[] = _.map(items, function(item) {
if (item === "true") {
return "newItem";
}
});
console.log(newItems);
// newItems = [undefined,undefined,"newItem"];
let filterItems: string[] = _.filter(items, function(item) {
if (item === "true") {
return "newItem";
}
});
console.log(filterItems);
// filterItems = ["true"]
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
我可以使用 _.filter,但是过滤器会 return "true" 的值而不是 "newItem",因为我需要它。
有什么建议吗?
你应该 filter
然后 map
,这样你只调用 map
匹配的项目
let newItems: string[] = _.map(
_.filter(items, function(item) {
return item === "true";
}),
function(newItem) {
return "newItem";
}
);
同时使用地图和过滤器:
collection.filter(it => it === 'true').map(it => 'newItem');
当你不能 map
一个值时返回 undefined
没有错,但你不想在最终结果中出现这些值,所以只 filter
然后输出。
您对 filter
返回布尔值而不是转换后的值的担忧正是过滤器的工作原理。它 returns 通过测试函数的原始值,因此您可以在子集上映射(或任何其他函数操作)。
您可以使用 reduce 同时进行两个操作:
let items: string[] = ["false", "false", "true"];
let newItems: string[] = _.reduce(items, function(memo, item) {
if (item === "true") {
memo.push("newItem");
}
return memo;
}, []);
let items = ["false", "false", "true"];
let newItems = _.reduce(items, function(memo, item) {
if (item === "true") {
memo.push("newItem");
}
return memo;
}, []);
console.log(newItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
因为 map 将 return "undefined" 用于不匹配的元素,什么是 return 只有匹配的元素的最佳方法?
let items: string[] = ["false", "false", "true"];
let newItems: string[] = _.map(items, function(item) {
if (item === "true") {
return "newItem";
}
});
console.log(newItems);
// newItems = [undefined,undefined,"newItem"];
let filterItems: string[] = _.filter(items, function(item) {
if (item === "true") {
return "newItem";
}
});
console.log(filterItems);
// filterItems = ["true"]
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
我可以使用 _.filter,但是过滤器会 return "true" 的值而不是 "newItem",因为我需要它。
有什么建议吗?
你应该 filter
然后 map
,这样你只调用 map
匹配的项目
let newItems: string[] = _.map(
_.filter(items, function(item) {
return item === "true";
}),
function(newItem) {
return "newItem";
}
);
同时使用地图和过滤器:
collection.filter(it => it === 'true').map(it => 'newItem');
当你不能 map
一个值时返回 undefined
没有错,但你不想在最终结果中出现这些值,所以只 filter
然后输出。
您对 filter
返回布尔值而不是转换后的值的担忧正是过滤器的工作原理。它 returns 通过测试函数的原始值,因此您可以在子集上映射(或任何其他函数操作)。
您可以使用 reduce 同时进行两个操作:
let items: string[] = ["false", "false", "true"];
let newItems: string[] = _.reduce(items, function(memo, item) {
if (item === "true") {
memo.push("newItem");
}
return memo;
}, []);
let items = ["false", "false", "true"];
let newItems = _.reduce(items, function(memo, item) {
if (item === "true") {
memo.push("newItem");
}
return memo;
}, []);
console.log(newItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>