FreeCodeCamp筆記之:Sorted Union

作者: delphuy | 来源:发表于2017-10-12 10:44 被阅读11次

题目

写一个 function,传入两个或两个以上的数组,返回一个以给定的原始数组排序的不包含重复值的新数组。换句话说,所有数组中的所有值都应该以原始顺序被包含在内,但是在最终的数组中不包含重复值。非重复的数字应该以它们原始的顺序排序,但最终的数组不应该以数字顺序排序。请参照下面验证判断中的例子。如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。
这是一些对你有帮助的资源:
Arguments object
Array.reduce()

function unite(arr1, arr2, arr3) {
  return arr1;
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);

思路

  1. 我算是领教这出题人的文字组织水平了,看了半天懵逼状态;
  2. 后来看到下面的示例,才明白要的是啥
    image.png
  3. 不就是说,比对多个数组,去掉后一个数组中在前面已重复的数,然后按照数组的顺序而并不是按照数字的自然排序,存入一个新数组;
  4. 看了题目提示需要用到 这2个 Arguments objectArray.reduce()
  5. 于是开始学习这两个函数的用法,发现 Arguments object 比较有用,还可能会用到 contact,indexOf 等;
  6. 定义2个变量,先将所有数组合并存入一个变量,然后依次判断当前位置的数值是否已经有存在,如果只出现一次,则存入另外一个变量

解答

function unite(arr1, arr2, arr3) {
    var A = (Array.from(arguments)).reduce(function(prev,cur,index,array){
    return prev.concat(cur);  // 用arguments 转换为数组后,合并 arrs 的所有数组;
  });
    var B =[] ;
  for (var i =0; i<=A.length; i++){
    if (A.indexOf(A[i]) === i){   // 意思是如果A 里面第一次出现 A[i]的字符为的位置为i,也就是说,A[i]的数值只出现了一次
       B.push(A[i]);   // 就将这个唯一值存起来
    }
  }
    return B;
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
  • 上面有 判断是否出现过几次可以说一下:

比如: A = (1,3,2,4,3)
java script if (A.indexOf(A[i]) === i)
当 i = 1 时,第一次循环,则A[i] 是 3,这个等式是 A.indexOf(A[1]) === 1 是成立的,所以3 会先存起来;当循环到 i = 4 时, A[i] 还是 3,但 A.indexOf(A[4]) === 1 ,等式不成立;

相关文章

网友评论

    本文标题:FreeCodeCamp筆記之:Sorted Union

    本文链接:https://www.haomeiwen.com/subject/novwyxtx.html