пытаясь выдвинуть каждый элемент с разделенными запятыми значениями также как элемент массива - PullRequest
0 голосов
/ 24 августа 2018

У меня есть объект 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.
Но ожидаемый результат - я хочу напечатать one для $scope.myArray[0] и two для $scope.myArray[1], три для $scope.myArray[2].

Каждое значение с разделением запятыми я также хочу использовать как элемент массива.
Я пробовал как показано ниже, но не работает.

var array = $scope.myArray.split(',');

Демо: http://plnkr.co/edit/q36BQeqsj5GVNkP4PPhq?p=preview

Ответы [ 4 ]

0 голосов
/ 24 августа 2018

Вот довольно простое средство:

$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)
0 голосов
/ 24 августа 2018

при нажатии элемента массива вы можете сделать:

$scope.myArray = $scope.myArray.concat(value.name.split(","));

Вот код, чтобы попробовать. http://plnkr.co/edit/nc91XI4vPJT0nEZvmMzU?p=preview

0 голосов
/ 24 августа 2018

Ваша проблема не имеет ничего общего с 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), []);
0 голосов
/ 24 августа 2018

Вам нужно разделить name и объединить результат с массивом:

angular.forEach($scope.myDataList, function (value, key) { 
  $scope.myArray = $scope.myArray.concat(value.name.split(',')); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...