在Javascript中将数组分为两部分

时间:2016-03-30 13:39:12

标签: javascript arrays for-loop while-loop

我有一个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>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:3)

您可以使用 splice()

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

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

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

仅使用 slice()

&#13;
&#13;
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));
&#13;
&#13;
&#13;

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

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

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", ... ]

答案 2 :(得分:0)

使用切片,例如:

mvn -Dstage=local process-resources

答案 3 :(得分:0)

至于原因:

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

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