Javascript将具有空值的数组转换为字符串

时间:2019-04-04 13:18:35

标签: javascript

我有数组

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("],[") + "]");

不是所有的数组位置都被填充

4 个答案:

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