【问题标题】:Create an Array with New Index from Two Existing Arrays JavaScript从两个现有数组 JavaScript 创建一个具有新索引的数组
【发布时间】:2018-03-21 13:56:27
【问题描述】:

我有两个数组

"index":`[2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018]`

,

和

"data":`[[null,null,null,63.0],
            [null,null,57.2307692308,null],
            [null,null,15.0,27.6666666667],
            [null,null,10.75,12.0],
            [null,213.0,14.6666666667,48.5],
            [null,128.0,21.25,23.0],
            [627.7647058824,113.0,36.7,19.5],
            [1201.0,132.0,523.7950819672,146.3708333333],
            [5414.1873111782,74.6666666667,668.5256916996,739.8781725888],
            [14697.0882352941,130.5,2812.1279069767,1258.0739856802],
            [11784.9188034188,1700.5353982301,4192.4097560976,1443.0708661417],
            [11256.6581196581,1218.4015748031,9908.7030075188,2055.599078341],
            [14321.3364485981,1032.9083333333,22745.9067357513,2683.6695652174],
            [16341.3267326733,491.2529411765,23721.7028571429,9549.88252149],
            [10479.1470588235,347.04,21638.5,16300.375]]}

` 请在javascript中提出最佳和合适的方法..

{ x: 2004, y: null },
            { x: 2005, y: null },
            { x: 2006, y: null },
            { x: 2007, y: null },
            { x: 2008, y: 213.0 },
            { x: 2009, y: 128.0 },
            { x: 2010, y: 627.7647058824},
            { x: 2011, y: 1201.0},
            { x: 2012, y: 5414.1873111782},
            { x: 2013, y: 14697.0882352941},
            { x: 2014, y: 11784.9188034188},
            { x: 2015, y: 11256.6581196581},
            { x: 2016, y: 14321.3364485981},
            { x: 2017, y: 16341.3267326733},
            { x: 2018, y: 10479.1470588235}

同样,数组 2 中的 4 个元素共有 4 个数组。

请帮我写一下javascript中的代码

【问题讨论】:

  • 您忘记添加 您的 JS 代码。 “我确实想转换” 和 “我希望你为我转换” 有很大的不同
  • 另外,你的数据怎么是字符串`[]`而不是数组[]?还是打错字了?
  • 欢迎来到 SO。请完成游览,您会明白我们不是“做你的功课”网站。阅读How to create a Minimal, Complete, and Verifiable example 并将问题相应地修改为最小的工作示例。如果不发布您的代码,您可能会删除您的问题。使用您声明的跟踪和错误代码......人们更愿意帮助您,因此我们都可以学习。尽情享受吧 ;-)
  • 那么您想使用x 的索引值和y 数组内数组中的最大 值吗?输入和输出的关系不是很清楚...

标签: javascript arrays react-native


【解决方案1】:

主要的问题是,你有一个数组,它为映射切换索引明智。您需要一种不同的方法,使用reduce,您可以迭代外部数组和内部数组并切换索引以推送结果对象。

var data = [[null, null, null, 63.0], [null, null, 57.2307692308, null], [null, null, 15.0, 27.6666666667], [null, null, 10.75, 12.0], [null, 213.0, 14.6666666667, 48.5], [null, 128.0, 21.25, 23.0], [627.7647058824, 113.0, 36.7, 19.5], [1201.0, 132.0, 523.7950819672, 146.3708333333], [5414.1873111782, 74.6666666667, 668.5256916996, 739.8781725888], [14697.0882352941, 130.5, 2812.1279069767, 1258.0739856802], [11784.9188034188, 1700.5353982301, 4192.4097560976, 1443.0708661417], [11256.6581196581, 1218.4015748031, 9908.7030075188, 2055.599078341], [14321.3364485981, 1032.9083333333, 22745.9067357513, 2683.6695652174], [16341.3267326733, 491.2529411765, 23721.7028571429, 9549.88252149], [10479.1470588235, 347.04, 21638.5, 16300.375]],
    index = [2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018],
    result = data.reduce((r, a, i) =>
        (a.forEach((y, j) => (r[j] = r[j] || []).push({ x: index[i], y })), r), []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    您应该为此使用函数reduce,这将允许您迭代到一个数组并更容易控制新数组。

    阅读有关如何使用它的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce。

    希望这会有所帮助!

    【讨论】:

    • 减少字符串?
    • 他说,来自两个数组。
    【解决方案3】:

    我认为我的 js 工具可以帮助你 https://github.com/wm123450405/linqjs

    let index = [2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018];
    let data = [[null,null,null,63.0],[null,null,57.2307692308,null],[null,null,15.0,27.6666666667],[null,null,10.75,12.0],[null,213.0,14.6666666667,48.5],[null,128.0,21.25,23.0],[627.7647058824,113.0,36.7,19.5],[1201.0,132.0,523.7950819672,146.3708333333],[5414.1873111782,74.6666666667,668.5256916996,739.8781725888],[14697.0882352941,130.5,2812.1279069767,1258.0739856802],[11784.9188034188,1700.5353982301,4192.4097560976,1443.0708661417],[11256.6581196581,1218.4015748031,9908.7030075188,2055.599078341],[14321.3364485981,1032.9083333333,22745.9067357513,2683.6695652174],[16341.3267326733,491.2529411765,23721.7028571429,9549.88252149],[10479.1470588235,347.04,21638.5,16300.375]];
    
    console.log(index.asEnumerable().zip(data, (i, d) => ({ x: i, y: d.asEnumerable().max() })).toArray());
    <script src="https://wm123450405.github.io/linqjs/libs/linq-js.min.js"></script>

    或者你可以使用 Array.prototype.map

    let index = [2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018];
    let data = [[null,null,null,63.0],[null,null,57.2307692308,null],[null,null,15.0,27.6666666667],[null,null,10.75,12.0],[null,213.0,14.6666666667,48.5],[null,128.0,21.25,23.0],[627.7647058824,113.0,36.7,19.5],[1201.0,132.0,523.7950819672,146.3708333333],[5414.1873111782,74.6666666667,668.5256916996,739.8781725888],[14697.0882352941,130.5,2812.1279069767,1258.0739856802],[11784.9188034188,1700.5353982301,4192.4097560976,1443.0708661417],[11256.6581196581,1218.4015748031,9908.7030075188,2055.599078341],[14321.3364485981,1032.9083333333,22745.9067357513,2683.6695652174],[16341.3267326733,491.2529411765,23721.7028571429,9549.88252149],[10479.1470588235,347.04,21638.5,16300.375]];
    
    console.log(index.map((x, i) => ({ x, y: Math.max(...data[i]) })));

    【讨论】:

      猜你喜欢
      • 2022-07-29
      • 2021-06-12
      • 1970-01-01
      • 2018-10-15
      • 2014-02-09
      • 2018-12-19
      • 2014-06-21
      • 2015-01-19
      • 2012-05-12
      相关资源
      最近更新 更多