这是一个两步问题:
1。)我正在尝试“加倍”。一个数组(原始数组)的内容,将其保存在一个新数组(Doubled Array)中。
2.)然后将这两个数组分配给具有2个属性的Object。 新对象 原始数字 加倍数字
这是我到目前为止所做的,我做错了什么?
var numbers = [8, 12, 5, 2, 5, 7];
var doubledNumbers = [];
function doubled(arr){
for (var i = 0; i < arr.length; i ++){
var dub = arr[i];
var dubb = dub*2;
doubledNumbers.push(dubb);
}
}
var collectionNumbers = {
orginialNumbers: numbers,
doubledNumbers: doubled(numbers)
};
console.log(collectionNumbers);
答案 0 :(得分:5)
在Javascript中执行此操作的最佳方法是使用map
函数:
var doubledNumbers = numbers.map(n => n*2);
map
的参数是用于将第一个数组中的元素转换为第二个数组中的元素的函数。这是一种非常有用的方法。
答案 1 :(得分:3)
要回答原始问题,您在collectionNumbers
中看到未定义的原因是因为您忘记在函数中返回doubledNumbers(默认情况下函数返回undefined
。
var numbers = [8, 12, 5, 2, 5, 7];
var doubledNumbers = [];
function doubled(arr){
var doubledNumbers = [];
for (var i = 0; i < arr.length; i ++){
var dub = arr[i];
var dubb = dub*2;
doubledNumbers.push(dubb);
}
return doubledNumbers;
}
var collectionNumbers = {
orginialNumbers: numbers,
doubledNumbers: doubled(numbers)
};
console.log(collectionNumbers);
答案 2 :(得分:1)
您的整个例程可以简化为
var numbers = [8, 12, 5, 2, 5, 7];
var collectionNumbers = {
orginialNumbers: numbers,
doubledNumbers: numbers.map(function(n) { return n*2; })
};
console.log(collectionNumbers);
使用Array.map创建一个带有加倍数字的新数组
答案 3 :(得分:1)
您当前的代码有什么问题,因为您的doubled
函数没有返回任何内容(这意味着它正在返回undefined
)。
更好的功能看起来像这样:
function doubled (arr) {
var doubled = [];
for (var i = 0; i < arr.length; i++) {
doubled.push(arr[i] * 2);
}
return doubled;
}
然而,更好的解决方案就是这样做:
var collectionNumbers = {
orginialNumbers: numbers,
doubledNumbers: numbers.map(function (n) { return n * 2; })
};
.map
太棒了。
答案 4 :(得分:0)
使用Array.from,您可以加倍并返回新数组
let inputArray = [9,8,7,3,2]
let outputArray = Array.from(inputArray, x => x *2) // creates new array
console.log(outputArray)