[英]Getting to grips with array.map()
对不起,基本问题。
我正在尝试简化一些代码,并且我已经查看了 array.map 而不是使用 for 循环来遍历我的数组和使用 array.push。 我设法让基础工作,但我正在努力应用 where 条件。 这是我当前的代码:
var masterArray = [{ "masterName": "One", "minorArray": [] }, { "masterName": "Two", "minorArray": ["A", "B", "C"] }, { "masterName": "Three", "minorArray": ["Q", "W", "E", "R", "T", "Y"] }, { "masterName": "Four", "minorArray": [1, 2, 3, 4, 5] }, ]; var minorArray = []; var setMinorArray = function(value) { var selectedName = value; for (var i = 0; i < masterArray.length; i++) { if (masterArray[i].masterName == selectedName) { minorArray = []; minorArray = masterArray[i].minorArray; break; } } console.log(minorArray); }; setMinorArray("Three");
我必须针对 IE11 用户,所以我不能使用箭头函数。 任何帮助,将不胜感激。
非常感谢
map
是错误的工作工具 - 您正在尝试在数组中find
一个元素:
var masterArray = [{ "masterName": "One", "minorArray": [] }, { "masterName": "Two", "minorArray": ["A", "B", "C"] }, { "masterName": "Three", "minorArray": ["Q", "W", "E", "R", "T", "Y"] }, { "masterName": "Four", "minorArray": [1, 2, 3, 4, 5] }, ]; var setMinorArray = function(value) { var minorArray = masterArray.find(x => x.masterName === value).minorArray; console.log(minorArray); }; setMinorArray("Three");
这不是map()
的适当用法。 当您想要创建一个新数组时使用它,该数组具有处理原始数组的每个元素的结果。 您的循环在处理元素之前检查条件,然后在处理该元素后退出循环。
为此,您应该使用find()
。 它返回与条件函数匹配的第一个元素。
var masterArray = [{ "masterName": "One", "minorArray": [] }, { "masterName": "Two", "minorArray": ["A", "B", "C"] }, { "masterName": "Three", "minorArray": ["Q", "W", "E", "R", "T", "Y"] }, { "masterName": "Four", "minorArray": [1, 2, 3, 4, 5] }, ]; var minorArray = []; var setMinorArray = function(value) { var found = masterArray.find(({masterName}) => masterName == value); if (found) { minorArray = found.minorArray; } console.log(minorArray); }; setMinorArray("Three");
其他人提供了正确的答案, Array.map
不是这项工作的工具,但如果您真的准备直接使用它,那么您可以 (ab) 创造性地使用它的方法如下:
const masterArray2 = [
{ masterName: 'One', minorArray: [] },
{ masterName: 'Two', minorArray: ['A', 'B', 'C'] },
{ masterName: 'Three', minorArray: ['Q', 'W', 'E', 'R', 'T', 'Y'] },
{ masterName: 'Four', minorArray: [1, 2, 3, 4, 5] },
]
const selectedValues = ['Three', 'Two']
const minorArray = masterArray2
.map(({ masterName, minorArray: ma }) => selectedValues.includes(masterName) ? ma : [] )
.join(',')
.split(',')
.filter(n => !!n)
console.info({ minorArray }) // will be ["A", "B", "C", "Q", "W", "E", "R", "T", "Y"]
该数组可以转换为键值查找对象,并且从 IE 9 开始可以使用reduce
:
var masterArray = [ { "masterName": "One" , "minorArray": [] }, { "masterName": "Two" , "minorArray": ["A", "B", "C"] }, { "masterName": "Three", "minorArray": ["Q", "W", "E", "R", "T", "Y"] }, { "masterName": "Four" , "minorArray": [1, 2, 3, 4, 5] } ]; var obj = masterArray.reduce(function(o, v) { return (o[v.masterName] = v.minorArray, o); }, {}); console.log( obj["Three"] );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.