Как лучше всего преобразовать этот массив значений, разделенных запятыми?

[ 'com--test,LFutx9mQbTTyRo4A9Re5ksjdnfsI4cKN4q2,on',
  'com--fxtrimester,SEzlksdfMpW3FxkSbzL7eo5MmqkPczCl2,on',
  'com--fxtrimester,LFutx9mQbTTyRoldksfns4A9Re5I4cKN4q2,on' ]

На три массива?

[ 'com--test',           [ LFutx9mQbTTyRo4A9Re5Ilsdf4cKN4q2', ['on',
  'com--fxtrimester',      SEzMpW3FxkSbzL7eo5MmlkdfqkPczCl2',  'on',
  'com--fxtrimester' ]     LFutksdfx9mQbTTyRo4A9Re5I4cKN4q2 ]  'on']

Я пытался что-то вроде:

 var indexToSplit = unique.indexOf(',');
 var status = unique.slice(3, indexToSplit - 1);
 var use = unique.slice(2, indexToSplit - 2);
 var pros = unique.slice(0, indexToSplit - 3);
 console.log(pros);

Но я понял, что это неправильно ... любая помощь приветствуется!

0
arnoldssss 11 Янв 2017 в 09:10

3 ответа

Лучший ответ

Вам придется перебрать массив и использовать string.split для получения отдельных частей.

Если у вас есть отдельные части, вы можете поместить их в необходимый массив;

var d = [ 'com--test,LFutx9mQbTTyRo4A9Re5ksjdnfsI4cKN4q2,on',
  'com--fxtrimester,SEzlksdfMpW3FxkSbzL7eo5MmqkPczCl2,on',
  'com--fxtrimester,LFutx9mQbTTyRoldksfns4A9Re5I4cKN4q2,on'];

var result = [[],[],[]];
var len = 3;
d.forEach(function(str, i){
  var _tmp = str.split(',');
  for (var i = 0; i<len; i++){
    result[i].push(_tmp[i])
  }
})

console.log(result)

Немного общего способа.

  • Зацикливайте данные и разбивайте каждую строку запятой (,)
  • Зацикливание на разделенных значениях и проверка, существует ли необходимый массив.
  • Если нет, инициализируйте массив, но вы не можете сделать p[i] = [], так как это приведет к первому значению. Вам также нужно будет инициализировать все предыдущие значения. Для этого вы можете использовать new Array(length). По умолчанию, если length больше 0, все индексы будут инициализированы как undefined.
  • Теперь нажмите на нужный массив. Положение будет сохранено.
var d = ['com--test,LFutx9mQbTTyRo4A9Re5ksjdnfsI4cKN4q2,on',
  'com--fxtrimester,SEzlksdfMpW3FxkSbzL7eo5MmqkPczCl2,on',
  'com--fxtrimester,LFutx9mQbTTyRoldksfns4A9Re5I4cKN4q2,on,test'
];


var result = d.reduce(function(p, c, index) {
  var _tmp = c.split(',');
  for (var i = 0; i < _tmp.length; i++) {
    // Check if position not defined.
    if (p[i] === undefined)
      // Initialize array and add default (undefined) to all elements before current element
      p[i] = new Array(index);

    p[i].push(_tmp[i])
  }
  return p;
}, [])

console.log(result)
3
Rajesh 11 Янв 2017 в 06:54

С map это становится:

  • для позиций X из 0, 1 и 2:
  • преобразовать каждый элемент в списке в массив и выбрать X-й элемент
var start = [ 'com--test,LFutx9mQbTTyRo4A9Re5ksjdnfsI4cKN4q2,on',
  'com--fxtrimester,SEzlksdfMpW3FxkSbzL7eo5MmqkPczCl2,on',
  'com--fxtrimester,LFutx9mQbTTyRoldksfns4A9Re5I4cKN4q2,on' ]


var out = [0,1,2].map(i => 
  start.map(x => x.split(',')[i]) )
console.log(out)
1
Steve Bennett 11 Янв 2017 в 06:25

Поскольку ваш вопрос не требует более общего случая, я смело принимаю его для 3-х массивов. Мы можем использовать функцию forEach для массива, представленного ниже. Код может быть одним из возможных решений.

var arr1 = [];
var arr2 = [];
var arr3 = [];

var x = ['com--test,LFutx9mQbTTyRo4A9Re5ksjdnfsI4cKN4q2,on', 'com--fxtrimester,SEzlksdfMpW3FxkSbzL7eo5MmqkPczCl2,on', 'com--fxtrimester,LFutx9mQbTTyRoldksfns4A9Re5I4cKN4q2,on']

x.forEach(function(data) {
  var dataArray = data.split(',');
  arr1.push(dataArray[0]);
  arr2.push(dataArray[1]);
  arr3.push(dataArray[2]);
});


console.log(arr1)
console.log(arr2)
console.log(arr3)
1
Sumit Gupta 11 Янв 2017 в 06:42