使用另一个数组中的值修改javascript forEach结果



我想用另一个数组中的值修改以下forEach结果,但我无法使其工作。

const BbDescriptionDictionary = ['AAA' , 'BBB', 'CCC',] 
const boardBasisOptionsModified = [];  
this.boardBasisOptions.forEach( (value) => {
boardBasisOptionsModified.push({ 
"key": value, "value": BbDescriptionDictionary[value] 
});  
});
this.boardBasisOptions = boardBasisOptionsModified;

您可以为.forEach提供第二个参数,指示boardBasisOptions的索引。像这样:

this.boardBasisOptions.forEach( (value, index) => {
boardBasisOptionsModified.push({ 
"key": value, "value": BbDescriptionDictionary[index] 
});  
});

您可能需要在forEach循环中添加index参数:
(我也用一些值初始化了boardBasisOptions)

请参阅以下工作片段:

boardBasisOptions = ['key1', 'key2', 'key3'];
const BbDescriptionDictionary = ['AAA', 'BBB', 'CCC', ]
const boardBasisOptionsModified = [];
this.boardBasisOptions.forEach((value, index) => {
boardBasisOptionsModified.push({
"key": value,
"value": BbDescriptionDictionary[index]
});
});
this.boardBasisOptions = boardBasisOptionsModified;
console.log("boardBasisOptions:");
console.log(this.boardBasisOptions);

您正试图使用值而不是索引来访问BbDescriptionDictionay数组中的值。您必须使用索引来访问数组的值。

只需添加index作为forEach函数的第二个参数。

this.boardBasisOptions.forEach( (value, index) => {
boardBasisOptionsModified.push({ 
"key": value, "value": BbDescriptionDictionary[index] 
});  
});

通过获取索引,可以使用Array#map而不是Array#push

const BbDescriptionDictionary = ['AAA', 'BBB', 'CCC',] 
this.boardBasisOptions = this
.boardBasisOptions
.map((key, index) => ({ key, value: BbDescriptionDictionary[index] }));

您应该只使用Array.prototype.map()来创建一个新的变异数组,而不是担心创建临时数组、变异数组然后分配它们。

const BbDescriptionDictionary = ['AAA' , 'BBB', 'CCC',] 
// Map runs the function on each array item and returns a new array
// with mutated the return value of that function
// Note: ({ ... }) is a shorthand way of returning a value
// (object in this case) without a function body {}
this.boardBasisOptions = this.boardBasisOptions.map((key, index) => ({
// Shorthand way of assigning a variable to an object using the var
// name as the key
key,
value: BbDescriptionDictionary[index]
})

覆盖这样的属性被认为是不好的做法,所以我会将原始的boardBasisOptions返回到一个新的属性,并在以后使用它:

const BbDescriptionDictionary = ['AAA' , 'BBB', 'CCC',] 
this.boardBasisOptionsWithDescriptions = this.boardBasisOptions.map((key, index) => ({
key,
value: BbDescriptionDictionary[index]
})

希望能帮助

最新更新