【问题标题】:Divide array in two parts in Javascript在Javascript中将数组分成两部分
【发布时间】:2016-07-18 13:25:56
【问题描述】:

我有一个包含 N 个元素的数组。我想分成两个数组。唯一的条件是第一个新数组由原始数组的前三个元素组成,第二个新数组必须包含所有其他元素。 例如原始数组包含["a","b","c","d","e","f","g","h"]。我想创建两个新数组:

first new array: ["a, "b", "c"];
second new array: ["d","e","f", "g","h"].

但我的代码将很多时间划分为原始数组。为什么?

function MyCtrl($scope) {
$scope.strengthChartData = ["Banana", "Orange", "Apple", "Mango", "asd", "lol", "ahhhaha", "llllll", "ehhehehe", "oooo", "aaaaa", "bbbbbbbb"];

$scope.arrays = [];
var size = 3;

while ($scope.strengthChartData.length > 0)
    $scope.arrays.push($scope.strengthChartData.splice(0, size));
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app ng-controller="MyCtrl">
    <h3>All elements:</h3>
    <br>
    <ul>
        <li ng-repeat="array in arrays">{{array}}</li>
    </ul>
    
    <h3>First array:</h3>
    <br>
    <ul>
        <li ng-repeat="array in arrays[0]">{{array}}</li>
    </ul>

    <h3>Second array:</h3>
    <br>
    <ul>
        <li ng-repeat="array in arrays[1]">{{array}}</li>
    </ul>
</div>

【问题讨论】:

  • 在可能的情况下避免使用 while 条件 - 除非您对可能无限期地在后台运行的东西感到满意。如果某件事可以通过有限周期解决,那通常是更好的方法。

标签: javascript arrays for-loop while-loop


【解决方案1】:

您可以为此使用 splice()

var arr = ["a", "b", "c", "d", "e", "f", "g", "h"],
  arr1 = arr.splice(3);

document.write(JSON.stringify(arr) + '<br/>' + JSON.stringify(arr1));

更新:如果您不想更新原始数组,那么 创建新数组并应用 splice() 或使用 slice()

仅使用 slice()

var arr = ["a", "b", "c", "d", "e", "f", "g", "h"],
  arr1 = arr.slice(0, 3);
arr2 = arr1.slice(3);

document.write(JSON.stringify(arr) + '<br/>' +
  JSON.stringify(arr1) + '<br/>' +
  JSON.stringify(arr2));

使用 splice()slice() 不带任何参数复制所有元素

var arr = ["a", "b", "c", "d", "e", "f", "g", "h"],
  arr1 = arr.slice();
arr2 = arr1.splice(3);

document.write(JSON.stringify(arr) + '<br/>' +
  JSON.stringify(arr1) + '<br/>' +
  JSON.stringify(arr2));

【讨论】:

  • 这将改变原始文件。我认为(不是 100% 清楚)他不想改变原始数组。
【解决方案2】:

至于为什么:

strengthChartData 的长度为 12。在您的同时,您将推送到您的 arrays 变量 strengthChartData 的第 3 个元素,并且您正在从 strengthChartData 中删除它们,因为 splice 修改了数组。

所以你的长度现在是 3 减。您在长度大于 0 时执行此操作,这意味着它将在长度为 12、9、6、3 时运行,并将在 0 处停止。因此,您实际上将前 3 个元素从 strengthChartData 推到您的array变量

【讨论】:

    【解决方案3】:

    使用切片,例如:

    var ar = [1,2,3,4,5,6];
    
    var p1 = ar.slice(0,4);
    var p2 = ar.slice(4);

    【讨论】:

      【解决方案4】:
      var a = ["a","b","c","d","e","f","g","h"];
      
      var b = a.slice(0,3); // => ["a","b","c"]
      var c = a.slice(3);   // => ["d", "e", ... ]
      

      【讨论】:

        猜你喜欢
        • 2017-04-01
        • 2020-09-21
        • 2014-10-21
        • 2011-11-26
        • 1970-01-01
        • 2019-02-09
        • 2017-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多