我有一个这样的数组:
var oldArr = [2,3,4,2,3,5,6,4,2,3,2];
var newArr = [];
我将一个参数(数字)传递给一个函数,该函数应该将oldArr中的值插入到newArr中,并将参数作为length
插入旧数组中找到的每个元素。
function getNumbers(num){
console.log('value passed is ', num);
for(var i=0; i<arr.length;i++){
newArr.push(arr[i]);
}
console.log('newArr', newArr);
}
getNumbers(2);
例如,
if I pass number 2 as in getNumbers(2);
new array output should be:
[2,2,3,3,4,4,5,5,6,6] //as the argument/length passed is 2.
if I pass number 3 as in getNumbers(3);
[2,2,2,3,3,3,4,4,4,5,5,5,6,6,6] //as the argument/length passed is 3.
我如何实现这一目标?
答案 0 :(得分:2)
试试这个
var oldArr = [2,3,4,2,3,5,6,4,2,3,2];
function getNumbers(arr, num){
return Array.from(new Set(arr))
.map((e) => new Array(num).fill().map(v => e))
.reduce((a, b) => a.concat(b),[]);
}
console.log(getNumbers(oldArr, 2));
console.log(getNumbers(oldArr, 3));
首先,您需要从数组中获取唯一值。这是Array.from(new Set(arr));
。
其次,我们可以为每个数字分配新数组(以便稍后能够很好地展平它)。这就是new Array(num).fill().map(v => e))
的作用。结果将类似于[[2,2],[3,3],[4,4]..]
等。
最后,使用Array.prototype.reduce将其展平。
答案 1 :(得分:1)
以下功能应该起作用
function duplicateN(oldArray, newArray, N) {
for (var i = 0; i < oldArray.length; i++) {
for (var j = 0; j < N; j++) {
newArray.push(oldArray[i]);
}
}
}
它只是迭代原始数组中的每个值,然后插入N次。
我不确定这个的用法,但是如果newArray总是空的,那么这样的东西会更容易维护
function duplicateN(inputArray, N) {
var duplicatedArray = [];
for (var i = 0; i < inputArray.length; i++) {
for (var j = 0; j < N; j++) {
duplicatedArray.push(inputArray[i]);
}
}
return duplicatedArray;
}
答案 2 :(得分:1)
var arr = [2,3,4,5];
function getNumbers(num){
var j = 1;
var newArr = [];
for(var i=0; i<arr.length;i++)
{
j = 1;
while(j<=num){
newArr.push(arr[i]);
j++;
}
}
console.log(newArr.join());
}
getNumbers(4);
答案 3 :(得分:1)
var oldArr = [2,3,4,2,3,5,6,4,2,3,2];
var uniqueArr = oldArr.filter(function(elem, index, self) {
return index == self.indexOf(elem);
})
console.log(uniqueArr)
function getNumbers(num){
var newArr = [];
for(var i=0; i<uniqueArr.length;i++){
for(var j=0;j<num;j++)
newArr.push(uniqueArr[i]);
}
console.log('newArr', newArr);
}
getNumbers(2);
getNumbers(3);
&#13;
使用Array#Filter从旧数组中删除所有重复项,然后遍历所有元素并将其存储在新数组中。
答案 4 :(得分:1)
您可以使用Array.prototype
方法链
var oldArr = [2,3,4,2,3,5,6,4,2,3,2];
function getNumbers(num){
return oldArr
.filter((elem, index, arr) => !arr.slice(index + 1).includes(elem))
.sort((prev, next) => next < prev)
.reduce((result, elem) => result.concat(Array(num).fill(elem)), [])
}
console.log(getNumbers(2));
console.log(getNumbers(3));
答案 5 :(得分:1)
let multiply_array = (arr, mi = 1) =>
[].concat.apply([], arr.filter((i, ind) =>
arr.indexOf(i) == ind).map(i =>
Array(mi).fill(i)));
multiply_array
函数有两个参数,一个数组和一个乘法整数。它通过数组过滤并通过比较位置查找所有唯一值。然后,它映射所有剩余的唯一整数,并用一个数组替换它们,该数组是传入的乘法整数指定的长度,并用唯一值填充。所有这些都连接在一起形成一个数组。
var oldArr = [2, 3, 4, 2, 3, 5, 6, 4, 2, 3, 2];
var newArr = [];
let multiply_array = (arr, mi = 1) =>
[].concat.apply([], arr.filter((i, ind) =>
arr.indexOf(i) == ind).map(i =>
Array(mi).fill(i)));
console.log(multiply_array(oldArr, 3));
&#13;