繁体   English   中英

我想将 arrays 推入数组

[英]i want to push arrays into array

我有两个参数和两个 arguments,其中一个应该是数字,另一个应该是数组,如果数组中的数字是相似的项目,我应该提取相似的数字然后再次将它们推入数组,并保持顺序不相似的数字,我已经写了这段代码,但它不起作用,我花了两天多的时间试图弄清楚这一点,但还没有结果。

function extractNumber(num, nums) {
if(nums.includes(num)===true){
  for (let i = 0; i <nums.length; i++) {
    if(nums[i]=== num){
     var popped = nums.splice(i,1);
      i--;
      nums.push(popped);
    } 
  }  
}
  return nums;
}

extractNumber(7,   [1,2,7,1,7,1,7,3,7,1]);

像这样的东西?

你的标题有点误导。

 function extractNumber(num, nums) { nums.forEach((i, index) => { //loop each item in nums if (i === num) { //if current item is same as num nums.splice(index, 1) //remove it from its position.. nums.push(i) //..and push it at the end of the array } }) return nums } console.log(extractNumber(7, [1, 2, 7, 1, 7, 1, 7, 3, 7, 1]))

我认为您的代码只有几个问题:

  • 而不是Array#push popped一个数组,而是推送num
  • i--我——因为那不是必需的。

我喜欢您的方法,因为如果num不是数组的元素,您可以避免不必要的循环。 因此,您更正后的代码如下所示:

 function extractNumber(num, nums) { if( nums.includes(num) ) { for (let i = 0; i <nums.length; i++) { if(nums[i] === num){ nums.splice(i,1); nums.push(num); } } } return nums; } console.log( extractNumber(7, [1,2,7,1,7,1,7,3,7,1]) );

如果我明白你想要这样的东西

function extractNumber(num, nums) {
 const matrixFix = nums.reduce((acc, cv) => {
  if (num !== cv) {
   return { notSimilar: [...acc.notSimilar, cv], similar: [...acc.similar] }
  };
  return { notSimilar: [...acc.notSimilar], similar: [...acc.similar, cv] 
  };
 }, { similar: [], notSimilar: [] })

 return [...matrixFix.notSimilar, ...matrixFix.similar];
}

extractNumber(7,   [1, 2, 7, 1, 7, 1, 7, 3, 7, 1]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM