Getting to grips with array.map()



很抱歉有基本问题。

我正在尝试简化一些代码,有人仔细查看了array.map,而不是使用for循环来迭代我的数组——使用array.prush。我设法完成了基本的工作,但很难应用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不是这份工作的工具,但如果你真的打算亲自使用它,下面是你如何创造性地使用它:


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"]

数组可以转换为键值查找对象,reduce从IE 9:开始可用

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"] );

最新更新