Преобразовать массив массивов в строку? - PullRequest
0 голосов
/ 04 мая 2018

Дан массив массивов с 2 значениями, такими как:

var arrayStd = [["G14",18],["G16",17],["G16",17],["G13",17]];

В настоящее время я использую это или его варианты:

var arrayStd = [["G14",18],["G16",17],["G16",17],["G13",17]];

var arrayToString = function(array){ 
  var str;
  array.map(function(a) {
    var item = a[0]+":"+a[1];
    str = str? str+'; '+item : item;
    } 
  );
return str
}
var str = arrayToString(arrayStd);
console.log(JSON.stringify(str));

Или

var arrayStd = [["G14",18],["G16",17],["G16",17],["G13",17]];

var arrayToString = function(array){ 
  return str =  JSON.stringify(array).replace(/\"|\[\[|\]\]/g , "").replace(/\],\[/g , "; ").replace(/,/g , ":");
}
var str = arrayToString(arrayStd);
console.log(JSON.stringify(str));

Есть ли более удобный способ получить str = "G14: 18; G16: 17; G16: 17; G13: 17"

Ответы [ 5 ]

0 голосов
/ 04 мая 2018

Вдохновлен предыдущими предложениями, но короче и удобнее для чтения, чем другие:

var arrayStd = [["G14",18],["G16",17],["G16",17],["G13",17]];

var arrayToString = function(array){ 
  return array.join("; ").replace(/,/g,":")
}
console.log(arrayToString(arrayStd));
0 голосов
/ 04 мая 2018
let arrayStd = [["G14",18],["G16",17],["G16",17],["G13",17]];
//"G14:18; G16:17; G16:17; G13:17"

let arrayNew = arrayStd.map((elem,i) => `${i!==0?'; 
':''}${elem[0]}:${elem[1]}`).join("");
console.log(arrayNew);
0 голосов
/ 04 мая 2018

Вы можете использовать .map() и .join() следующим образом:

let str = arrayStd.map(a => a.join(":")).join("; ");

Демо-версия:

let arrayStd = [["G14", 18], ["G16", 17], ["G16", 17], ["G13", 17]];

let str = arrayStd.map(a => a.join(":")).join("; ");

console.log(str);
0 голосов
/ 04 мая 2018

Внесение дополнительных улучшений в ваш код ...

Вы должны использовать .forEach() вместо .map(), поскольку вы ничего не возвращаете.

var arrayStd = [
  ["G14", 18],
  ["G16", 17],
  ["G16", 17],
  ["G13", 17]
];

var arrayToString = function(array) {
  var str = "";
  array.forEach(function(a) {
    var item = a[0] + ":" + a[1];
    str = str ? str + '; ' + item : item;
  });
  return str
}
var str = arrayToString(arrayStd);
console.log(JSON.stringify(str));

Тем не менее, .map() на самом деле полезен здесь для отображения каждого внутреннего массива в строку, затем взять новый массив строк и соединить их.

var arrayStd = [
  ["G14", 18],
  ["G16", 17],
  ["G16", 17],
  ["G13", 17]
];

var arrayToString = function(array) {
  var str = array.map(function(a) {
    return a[0] + ":" + a[1];
  }).join("; ");

  return str
}
var str = arrayToString(arrayStd);
console.log(JSON.stringify(str));

Вы также можете использовать .join() во внутреннем массиве и избавиться от переменной str, немедленно возвращая результат.

var arrayStd = [
  ["G14", 18],
  ["G16", 17],
  ["G16", 17],
  ["G13", 17]
];

var arrayToString = function(array) {
  return array.map(function(a) {
    return a.join(":");
  }).join("; ");
}
var str = arrayToString(arrayStd);
console.log(JSON.stringify(str));

Наконец, в современных средах вы можете преобразовать свои функции в «функции стрелок», чтобы получить более краткий синтаксис.

const arrayStd = [
  ["G14", 18],
  ["G16", 17],
  ["G16", 17],
  ["G13", 17]
];

const arrayToString = array => array.map(a => a.join(":")).join("; ")

var str = arrayToString(arrayStd);
console.log(JSON.stringify(str));

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

0 голосов
/ 04 мая 2018

Вы можете использовать функцию карты и присоединить полученный массив.

let arrayStd = [["G14",18],["G16",17],["G16",17],["G13",17]];
//"G14:18; G16:17; G16:17; G13:17"

let arrayNew = arrayStd.map((elem,i) => `${i!==0?'; ':''}${elem[0]}:${elem[1]}`).join("");
console.log(arrayNew);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...