ES6将两个数组合并成一个对象数组

需求

有这么两个数组

 1 let metrodates = [
 2  "2008-01",
 3  "2008-02",
 4  "2008-03",..ect
 5 ];
 6 let figures = [
 7  0,
 8  0.555,
 9  0.293,..ect
10 ]

想要这样的结果

1 let result = [
2    {data: 0, date: "2008-01"},
3    {data: 0.555, date: "2008-02"},
4    {data: 0.293, date: "2008-03"},..ect
5 ];

方案一

1 let result = [];
2 for(let index in metrodates){
3     result.push({data: figures[index], date: metrodates[index]});
4 }

此方案为最原始方法,简单,但过于low

方案二

1 let result = metrodates.map((date,i) => ({date, data: figures[i]}));

此方案使用了ES6中的map,简洁,但本质还是遍历,显得有些low

方案三

1 const zip = ([x,...xs], [y,...ys]) => {
2   if (x === undefined || y === undefined)
3     return [];
4   else
5     return [[x,y], ...zip(xs, ys)];
6 }
7 let result = zip(metrodates, figures).map(([date, data]) => ({date, data}));

此方案使用了ES6+递归,显得高大上起来了。

方案四

 1 const isEmpty = xs => xs.length === 0;
 2 const head = ([x,...xs]) => x;
 3 const tail = ([x,...xs]) => xs;
 4 const map = (f, ...xxs) => {
 5   let loop = (acc, xxs) => {
 6     if (xxs.some(isEmpty))
 7       return acc;
 8     else
 9       return loop([...acc, f(...xxs.map(head))], xxs.map(tail));
10   };
11   return loop([], xxs);
12 }
13 let result = map((date, data) => ({date, data}), metrodates, figures);

此方案是方案三的加强版,它能接受多个数组映射成对象数组,威力无比!

原文地址:https://www.cnblogs.com/guanghe/p/11445426.html

时间: 2024-11-02 22:09:41

ES6将两个数组合并成一个对象数组的相关文章

php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

版权声明:本文为博主原创文章,未经博主允许不得转载. 最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二维数组的第一维的键是特定字段的值,二维的键可以是随机索引,也可以是其中的另一个字段的值.其实这个需求经常会在工作中碰到,只是碰到的时候一个有重复的就直接用之前的覆盖后面的或者用之后的覆盖之前的,这样很容易就可以处理了.很少碰到这种有一维数组又有二维数组的情况,先上代码: $a = array( 0

Clojure:将两个list合并成一个map

假设我们有两个list,分别是: (def a [“one” “two” “three”]) (def b [1 2 3]) 我们要把它们合为一个键值对应的map,做法很简单: 1. 先将a和b合为一个一一对应的list: (map vector a b) => (["one" 1] ["two" 2] ["three" 3]) 2. 然后再将list转化成为map: (into {} (map vector a b)) => {&q

对N个数组进行操作。先把这N个一维数组合并成一个2为数组;然后进行操作

using System;using System.Collections.Generic;using System.Linq;using System.Collections;using System.Text;using System.Diagnostics; namespace Hecha.Test{ class Program { static void Main(string[] args) { List<string>[] aa = new List<string>[5

php将两个或多个数组合并为一个数组函数

array_merge() 函数把两个或多个数组合并为一个数组. 例子 1 <?php $a1=array("a"=>"Horse","b"=>"Dog"); $a2=array("c"=>"Cow","b"=>"Cat"); print_r(array_merge($a1,$a2)); ?> 输出: Array

python将两个数组合并成一个数组的两种方法的代码

内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","Green","Blue"]c2 = ["Orange","Yellow","Indigo"]c1.extend(c2) assert c1 == ["Red","Green",&q

数组冒泡排序,文件读取,数据库读取,string类型的int数组转换成int数组

排序方式(枚举) 1 public enum SortBy 2 { 3 Asc, 4 Desc 5 } 数组冒泡排序方法 1 public class SortEntity 2 { 3 public static int[] SortArray(int[] array,SortBy sortby) 4 { 5 int flag; 6 switch (sortby) 7 { 8 case SortBy.Asc: 9 for (int i = 0; i < array.Length - 1; i++

将字符串数组转换成整形数组

/// <summary> /// 将字符串数组转换成整形数组/// </summary> /// <param name="Content"></param> /// <returns></returns> protected static int[] ToIntArray(string[] Content) { int[] c = new int[Content.Length]; for (int i = 0;

字符串集合或字符串数组转换成json数组

字符串可以是List<String>类型的字符串集合,也可以是String[]类型的字符串数组,二者转换成JSON数组的方式没有什么不同.下面代码注意关键的部分即可(画红线部分). 1. List<String>类型的字符串集合转换成JSON数组,如下所示: List<String> shotLst = ecsDao.selectShotInstanceData4Ali(requestShotMap); JSONArray shotrray = JSONArray.fr

【tp5】索引数组转成关联数组 ( $a=[],转换成 $a[&#39;aa&#39;=&gt;2,&#39;bb&#39;=&gt;&#39;3c&#39;] )

概念: 索引数组 ==== >>>$arr = []; 关联数组 ====>>> $arr = [ 'orange'=>1,'apple'=>'good'  ]; 1.在tp5之前的tp3.2,我们知道索引数组转关联数组,是直接可以转成功的,因为php是弱语言类型. 2.在tp5之后,索引数组不能直接转关联数组,必要通过isset进行判断,然后才能给转成关联数组. 否则,tp5会报错: 未定义数组索引: aa 如何避免这个错误呢? 可以isset进行判断['