我正在尝试将数组中的每个元素加倍
let arr = ['onions', 'tomatoes', 'etc'...';
带有for循环并不断出现NaN
错误...我仍在学习,所以任何建议都将不胜感激。
我已经尝试过循环,.map()
和其他方法,但是看不到明显的问题...
let newIngr = tortSoup.filter(function(value, index, arr) {
if (value !== 'onion' && value !== 'red pepper') {
return value;
console.log(newIngr);
});
}
let myReci = [];
for(var i = 0; i < newIngr.length; i++) {
myReci[i] = newIngr[i] * 2;
}
console.log(myReci);
预期:每个数组元素乘以2并返回:
['onions', tomatoes', 'garlic', 'fontina']
将成为:
['onions', 'onions', 'tomoatoes', 'tomatoes', garlic, 'garlic', 'fontina', 'fontina']
答案 0 :(得分:2)
这是使用Array.reduce()
和散布运算符的一种方法:
const array = ['onions', 'tomatoes', 'garlic', 'fontina'];
const result = array.reduce((acc, x) => ([...acc, x, x]), []);
console.log(result)
Array.reduce
遍历您的输入数组并为每个元素调用回调。这个回调函数有两个参数,第一个是最后一次迭代的输出,第二个是当前数组项。
此处的回调返回一个新数组,该数组由回调的前一个结果组成(使用扩展运算符...
扩展到新数组中),当前项重复两次。
要开始归约过程,我们还需要一个初始值,这里我们给出一个空数组({{1}的最后一个参数)。
以下是回调中reduce
和acc
的值的详细说明,以进行以下简化:
x
['a', 'b', 'c'].reduce((acc, x) => ([...acc, x, x]), []);
acc = [], x = 'a' => returns ['a', 'a']
acc = ['a', 'a'], x = 'b' => returns ['a', 'a', 'b', 'b']
答案 1 :(得分:1)
input
对.map()
数组进行迭代。Array()
构造函数初始化新数组,并使用.fill()
数组方法填充它。.concat()
和散布运算符将数组的数组转换为单个数组。
const input = ['onions', 'tomatoes', 'garlic', 'fontina'];
const dupeValues = (arr, factor) => [].concat(...arr.map(s => new Array(factor).fill(s)));
console.log(dupeValues(input, 2));
console.log(dupeValues(input, 3));
答案 2 :(得分:0)
使用原始JavaScript:
const ingredients = [ 'onions', 'tomatoes', 'garlic', 'fontina' ]
const ingredientsToRemove = [ 'onions', 'red pepper' ]
// Using Array.reduce method
const doubleIngredients = ingredients.reduce(
( array, ingredient ) =>
{
// If the ingredient has to be removed, return the array
// Else return the array with two times the current ingredient
return ingredientsToRemove.includes( ingredient ) ?
array
:
[ ...array, ingredient, ingredient ]
},
[]
)
console.log({ ingredients, doubleIngredients })
答案 3 :(得分:0)
这里的问题是
字符串* 2不会向您返回2个字符串。它将返回SELECT t1.Name, t2.Age
FROM YourTable2 t2
LEFT JOIN YourTable1 t1 ON t1.ID = t2.ID
WHERE (t2.ID, t2.Age) IN (
SELECT ID, Age
FROM YourTable2
GROUP BY ID, Age
HAVING COUNT(*) > 1
);
NaN
您要实现的目标可以通过console.log('test'* 2) //NaN
方法来完成。
repeat
您的预期输出可以像这样
console.log('test '.repeat(2))
答案 4 :(得分:0)
使用Array.flatMap()
(IE / Edge不支持):
const array = ['onions', 'tomatoes', 'garlic', 'fontina'];
const result = array.flatMap(item => [item, item]);
console.log(result)