简体   繁体   中英

Convert array of arrays to string?

Given an array of arrays with 2 vals such :

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

I currently use this or variations of this :

 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)); 

Or

 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)); 

Is there a slicker way to do obtain str= "G14:18; G16:17; G16:17; G13:17"

You can use .map() and .join() like this:

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

Demo:

 let arrayStd = [["G14", 18], ["G16", 17], ["G16", 17], ["G13", 17]]; let str = arrayStd.map(a => a.join(":")).join("; "); console.log(str); 

Making incremental improvements to your code...

You should be using .forEach() instead of .map() since you're not returning anything.

 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)); 


However, .map() is actually useful here to map each inner array to a string, then take the new array of strings and join them.

 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)); 


You can also use .join() on the inner array, and can get rid of the str variable by returning the result immediately.

 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)); 


Finally, in modern environments, you can convert your functions to "arrow functions" to get a more concise syntax.

 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)); 

I also changed var to const , which is a good idea for variables you won't modify.

Highly inspired by previous suggestions, yet shorter and more readable than others :

 var arrayStd = [["G14",18],["G16",17],["G16",17],["G13",17]]; var arrayToString = function(array){ return array.join("; ").replace(/,/g,":") } console.log(arrayToString(arrayStd)); 

You can use map function, and join the resulting array.

 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); 

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM