繁体   English   中英

掌握 array.map()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM