我有数组
localCostp:
0:null
1:null
2:0.5
3:null
4:null
5:null
6:0.5
7:null
8:null
,我想将其转换为如下所示的字符串
"[],[],[0.5],[],[],[],[0.5],[],[]"
我尝试了以下
console.log("[" + Object.values(localCostp).join("],[") + "]");
但是我丢失了空值
"[0.5],[0.5]"
我用以下代码填充数组
Array.prototype.shuffle = function() {
var r=[],c = this.slice(0);
for (let i = c.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[c[i], c[j]] = [c[j], c[i]];
}
return c;
};
Array.prototype.populateUnique = function(n) {
return Object.keys( Object( 0+Array(n) ) );
};
var getRandomInts = function(num, min, max) {
var a = [].populateUnique(max+1).slice(min);
a = a.shuffle();
return a.slice(0,num);
};
BordsIdtoFill = getRandomInts(NumOfBoardToFill,1,6);
switch(retrivePanelsPanelsbetType(configGenerateData.panelsBetType)) {
case 1: case 2:{
gameMultiplayer = 1;
} break;
case 3: case 4 : case 5: {
gameMultiplayer = 2;
} break;
case 6: {
gameMultiplayer = 2;
} break;
}
var localCostp = new Array(9);
BordsIdtoFill.forEach(function(Bord) {
localCostp[Bord]= (1*gameMultiplayer * 0.5)
});
console.log("[" + Object.values(localCostp).join("],[") + "]");
不是所有的数组位置都被填充
答案 0 :(得分:3)
这是有趣的输出。 :-)
在评论中您说过:
我用以下代码填充数组
var localCostp = new Array(9); BordsIdtoFill.forEach(function(Bord) { localCostp[Bord] = (1*gameMultiplayer * 0.5); });
不是所有的数组位置都被填充
与您显示的阵列非常不同。您显示的数组中有null
个。该数组中有 gap 。读取间隙值时,您会得到undefined
(而不是null
)。
要做到这一点,您要么想使用简单的for
循环,for-of
循环,要么使用其他方式使用values
中的可迭代项(包括间隙),或先填补空白。
例如,这使用了values
中的可迭代项:
const string = [...localCostp.values()].map(entry => JSON.stringify(entry === undefined ? [] : [entry])).join();
实时示例:
const localCostp = new Array(9);
localCostp[2] = 0.5;
localCostp[6] = 0.5;
const string = [...localCostp.values()].map(entry => JSON.stringify(entry === undefined ? [] : [entry])).join();
console.log(string);
在另一条评论中,您说过:
如果我在您的环境中运行您的代码,我认为评估预请求脚本时出错:TypeError:localCostp.values(...)[Symbol.iterator]不是函数
令人惊讶的是,在ES2015中添加了values
,与此同时,Symbol.iterator和数组扩展也是如此,但是您的错误消息使您似乎拥有后者,但没有前者。我怀疑您正在转码并且缺少polyfill。
这是ES5版本(不能使用map
,因为它不会消除空白):
var result = [];
for (var i = 0; i < localCostp.length; ++i) {
var entry = localCostp[i];
result[i] = JSON.stringify(entry === undefined ? [] : [entry]);
}
result = result.join();
实时示例:
var localCostp = new Array(9);
localCostp[2] = 0.5;
localCostp[6] = 0.5;
var result = [];
for (var i = 0; i < localCostp.length; ++i) {
var entry = localCostp[i];
result[i] = JSON.stringify(entry === undefined ? [] : [entry]);
}
result = result.join();
console.log(result);
答案 1 :(得分:1)
您可以将值映射到数组中,也可以不映射数组中的值,以对数据进行字符串化处理,然后在外括号之间获取字符串。
var data = [null, null, 0.5, null, null, null, 0.5, null, null],
result = JSON.stringify(data.map(v => v === null ? [] : [v])).slice(1, -1);
console.log(result);
带有模板字符串的示例。
var data = [null, null, 0.5, null, null, null, 0.5, null, null],
result = data.map(v => `[${v === null ? '' : v}]`).join();
console.log(result);
带有稀疏项的数组。
var array = [, , 0.5, , , , 0.5, , ],
result = Array.from(array, (v = '') => `[${v}]`).join();
console.log(result);
答案 2 :(得分:0)
您可以只使用Array#map
来产生[]
值的null
或将数字括在方括号中,然后使用Array#join
获得所需的输出:
let arr = [
null,
null,
0.5,
null,
null,
null,
0.5,
null,
null
]
let str = arr
.map(item => item === null ? "[]" : `[${item}]`)
.join();
console.log(str);
答案 3 :(得分:0)
天真的做法是
const arr = [null, null, 0.5, null, 0.5]
const processedArr = arr.map(element => {
if (element) {
return [element];
} else {
return [];
}
});
const result = JSON.stringify(processedArr);
console.log(result)
一种简短但不易读的方法是使用以下内容:
const arr = [null, null, 0.5, null, 0.5];
const result = `[[${arr.join('],[')}]]`;
console.log(result);