我对如何将嵌套数组转换为字符串感到困惑,但字符串中仍有数组,有人可以帮助我吗?
输入:[["Jimmy", 30, ["Ford", "BMW", "Fiat"]], ["Fiona", 25, ["Ford", "BMW", "Fiat"]], ["Anny", 19, ["Ford", "BMW", "Fiat"]], ["Gabby", 27, ["Ford", "BMW", "Fiat"]], ["Kevin", 20, ["Ford", "BMW", "Fiat"]]]
预期产出:
"Jimmy,30,[Ford,BMW,Fiat]
Fiona,25,[Ford,BMW,Fiat]
Anny,19,[Ford,BMW,Fiat]
Gabby,27,[Ford,BMW,Fiat]
Kevin,20,[Ford,BMW,Fiat]"
谢谢
答案 0 :(得分:1)
有一个可行的解决方案......它只是将每个项目的第三个元素格式化为字符串,以便它可以在最后加入:
var data = [["Jimmy", 30, ["Ford", "BMW", "Fiat"]], ["Fiona", 25, ["Ford", "BMW", "Fiat"]], ["Anny", 19, ["Ford", "BMW", "Fiat"]], ["Gabby", 27, ["Ford", "BMW", "Fiat"]], ["Kevin", 20, ["Ford", "BMW", "Fiat"]]]
var dataAsString = data.map(function(d){ return [d[0], d[1],'[' + d[2].join(',') + ']']})
var output = dataAsString.join(',');
答案 1 :(得分:1)
您可以使用嵌套的array#reduce
。在内部数组内部,检查数组并生成以逗号分隔的数组,并将结果附加到结果中。
var arr = [["Jimmy", 30, ["Ford", "BMW", "Fiat"]], ["Fiona", 25, ["Ford", "BMW", "Fiat"]], ["Anny", 19, ["Ford", "BMW", "Fiat"]], ["Gabby", 27, ["Ford", "BMW", "Fiat"]], ["Kevin", 20, ["Ford", "BMW", "Fiat"]]],
result = arr.reduce((r, a) => {
var arr = a.reduce((res,v) => {
var val = Array.isArray(v) ? `[${v.join(',')}]` : v;
res.push(val);
return res;
}, []);
return r + arr.join(',') + '\n';
}, '');
console.log(result);

答案 2 :(得分:1)
我们可以使用递归函数将任何数组中的任何内容和所有内容存储在字符串中,然后从函数中返回字符串。
function printArr(arr) {
let str = "";
for (let item of arr) {
if (Array.isArray(item)) str += printArr(item);
else str += item + ", ";
}
return str;
}
console.log(
printArr([
["Jimmy", 30, ["Ford", "BMW", "Fiat"]],
["Fiona", 25, ["Ford", "BMW", "Fiat"]],
["Anny", 19, ["Ford", "BMW", "Fiat"]],
["Gabby", 27, ["Ford", "BMW", "Fiat"]],
["Kevin", 20, ["Ford", "BMW", "Fiat"]]
])
);

答案 3 :(得分:0)
一个天真的解决方案是使用JSON.stringify然后使用一点replace
来更好地格式化它:
let result = JSON.stringify([["Jimmy", 30, ["Ford", "BMW", "Fiat"]], ["Fiona", 25, ["Ford", "BMW", "Fiat"]], ["Anny", 19, ["Ford", "BMW", "Fiat"]], ["Gabby", 27, ["Ford", "BMW", "Fiat"]], ["Kevin", 20, ["Ford", "BMW", "Fiat"]]])
.replace(/(\]\]\,)\[/g, "]\n") // Adding new lines and removing starting [
.replace(/(\[\[|\]\]|\")/g,""); // removing junk
console.log(result);
干净的解决方案是根据您收到的对象自己构建字符串
答案 4 :(得分:0)
这是一个处理它的小型递归函数:
const input = [["Jimmy", 30, ["Ford", "BMW", "Fiat"]], ["Fiona", 25, ["Ford", "BMW", "Fiat"]], ["Anny", 19, ["Ford", "BMW", "Fiat"]], ["Gabby", 27, ["Ford", "BMW", "Fiat"]], ["Kevin", 20, ["Ford", "BMW", "Fiat"]]];
function toString(input, level) {
// input is not an array, therefore just return the input itself
if (!Array.isArray(input)) {
return input + ",";
} else {
if (Array.isArray(input) && level < 2) {
// first two levels of arrays should be broken down
let text = "";
input.forEach(part => text += toString(part, level+1));
text += "\n";
return text;
} else {
// third level of arrays should just be printed, but without quotes
let text = JSON.stringify(input);
while (text.indexOf("\"") > -1) {
text = text.replace("\"", "");
}
return text;
}
}
}
const result = toString(input, 0)
console.log(result);
答案 5 :(得分:0)
简单forEach
解决方案。对最内层的数组使用JS内部Array.toString()
功能..
var arr=[["Jimmy", 30, ["Ford", "BMW", "Fiat"]], ["Fiona", 25, ["Ford", "BMW", "Fiat"]], ["Anny", 19, ["Ford", "BMW", "Fiat"]], ["Gabby", 27, ["Ford", "BMW", "Fiat"]], ["Kevin", 20, ["Ford", "BMW", "Fiat"]]]
var str='';
arr.forEach(function(el) {str += el[0] + ', ' + el[1] + ', [' + el[2] + '] '});
console.log(str);
答案 6 :(得分:-1)
您可以使用lodash来实现此目的。
var data = [["Jimmy", 30, ["Ford", "BMW", "Fiat"]], ["Fiona", 25, ["Ford", "BMW", "Fiat"]], ["Anny", 19, ["Ford", "BMW", "Fiat"]], ["Gabby", 27, ["Ford", "BMW", "Fiat"]], ["Kevin", 20, ["Ford", "BMW", "Fiat"]]]
var flattenedData = _.flattenDeep(data);
var stringifiedData = _.toString(flattenedData)
console.log(stringifiedData);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;