[英]trying to push each element with comma separated values also as an array element
我有下面的json對象。
$scope.myDataList = [
{name:"one,two"},
{name:"three"},
{name:"four"},
{name:"five,eight,nine"}
]
我正在迭代列表,並按如下所示將元素推入數組。
$scope.myArray = new Array();
angular.forEach($scope.myDataList, function (value, key) {
$scope.myArray.push(value.name);
});
我也想在數組中使用逗號分隔的值推送每個元素。 例:
當我打印$scope.myArray[0]
,它打印one,two
。
但是預期的結果是我想為$scope.myArray[0]
打印one
,為$scope.myArray[1]
打印two
,為$scope.myArray[2]
三個。
每個帶有逗號分隔的值我也想作為數組元素推送。
我嘗試如下,但不起作用。
var array = $scope.myArray.split(',');
您需要拆分name
然后將結果連接到數組:
angular.forEach($scope.myDataList, function (value, key) {
$scope.myArray = $scope.myArray.concat(value.name.split(','));
});
您的問題與AngularJS無關,所以我用純JavaScript重寫了它:
$scope = {}; $scope.myDataList = [{name:"one,two"},{name:"three"},{name:"four"},{name:"five,eight,nine"}] $scope.myArray = $scope.myDataList.map(({ name }) => name.split(',')) .reduce((result, splitElement) => result.concat(splitElement), []); console.log($scope.myArray);
請注意,代碼中的以下行
$scope.myArray.push(value.name);
將未拆分的字符串(如'five,eight,nine'
推入$scope.myArray
。 這不是您想要的。 同樣, $scope.myArray.split(',')
將失敗,因為Array.prototype
沒有split
功能。
獲得正確結果的一種方法是映射到原始數組並拆分每個元素(結果是字符串數組的數組)。 之后,您可以使用Array.concat
將內部字符串數組連接在一起。 這是以下兩行的內容:
$scope.myArray = $scope.myDataList.map(({ name }) => name.split(','))
.reduce((result, splitElement) => result.concat(splitElement), []);
這是一個相當簡單的方法:
$scope.myArray = $scope.myDataList.reduce((a, {name}) => a.concat(name.split(',')), [])
請注意,您要執行的操作是獲取原始列表並創建一個新列表。 由於它不是一對一的映射,因此不是map
。 但是reduce
是合適的,並且比forEach
攜帶更多的信息。
const $scope = { myDataList: [ {name:"one,two"}, {name:"three"}, {name:"four"}, {name:"five,eight,nine"} ] } $scope.myArray = $scope.myDataList.reduce((a, {name}) => a.concat(name.split(',')), []) console.log($scope)
在推送數組元素時,您可以執行以下操作:
$scope.myArray = $scope.myArray.concat(value.name.split(","));
這是嘗試的代碼。 http://plnkr.co/edit/nc91XI4vPJT0nEZvmMzU?p=preview
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.