FreeCodeCamp筆記之:Sorted Union

题目

写一个 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 ,等式不成立;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,265评论 0 4
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,497评论 0 17
  • 第三章 类型、值和变量 1、存取字符串、数字或布尔值的属性时创建的临时对象称做包装对象,它只是偶尔用来区分字符串值...
    坤少卡卡阅读 650评论 0 1
  • 前两天在新华书店不经意间再次看到这本《就想开家小小咖啡馆》。这是一本我在大学时看过的书,可我一下子又一点都想不起来...
    夏听冬雨阅读 311评论 0 0
  • 本周关键字:小吃+早饭 本周关键字:依旧是简单 1.基础泡芙 原料:低筋面粉50克,水80克,色拉油35克(或黄油...
    派派小就阅读 149评论 0 0