使用“ for”循环将数组中的每个元素乘以2

时间:2019-02-10 16:48:48

标签: javascript arrays loops for-loop

我正在尝试将数组中的每个元素加倍

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

5 个答案:

答案 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}的最后一个参数)。

以下是回调中reduceacc的值的详细说明,以进行以下简化:

x
  1. ['a', 'b', 'c'].reduce((acc, x) => ([...acc, x, x]), []);
  2. acc = [], x = 'a' => returns ['a', 'a']
  3. 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)