将对象转换为数组,在数组索引之间插入值

时间:2018-01-12 19:15:35

标签: javascript

我有一个问题,我将表单从客户端发送到服务器并获取对象,该复选框为true,这是问题。例如'0': true, '3':true我希望我的数组看起来[true,false,false,true],但现在我得到这样的数组[true, true]我使用map。因此,在对象true之间,我会插入false。请查看我的代码:

var correctAns = [];
var quizCorrectAnswer = 
    { '0': { '0': true },
      '1': { '0': true, '3': true },
      '2': { '2': true } 
     }
for(correct in quizCorrectAnswer){
  correctAns.push(Object.keys(quizCorrectAnswer[correct]).map((k) => 
  quizCorrectAnswer[correct][k]))
}

我想收到以下数组:0: [true], 1: [true, false, false, true], 2: [false, false, true]但现在我得到0: [true], 1: [true, true], 2: [true]

4 个答案:

答案 0 :(得分:1)

这应该是你要找的东西:

var correctAns = {};
var quizCorrectAnswer = 
    { '0': { '0': true },
      '1': { '0': true, '3': true },
      '2': { '2': true } 
     }
     
Object.keys(quizCorrectAnswer).forEach((question) => {
  correctAns[question] = Object.keys(quizCorrectAnswer[question]).reduce((prev, key) => {
    while (prev.length < key) {
      prev.push(false);
    }
    prev.push(true);
    return prev;
  }, []);
});

console.log(correctAns);

如果您希望correctAns只是一个数组,请改用:

var quizCorrectAnswer = 
    { '0': { '0': true },
      '1': { '0': true, '3': true },
      '2': { '2': true } 
     }
     
var correctAns = Object.keys(quizCorrectAnswer).map((question) => {
  return Object.keys(quizCorrectAnswer[question]).reduce((prev, key) => {
    while (prev.length < key) {
      prev.push(false);
    }
    prev.push(true);
    return prev;
  }, []);
});

console.log(correctAns);

答案 1 :(得分:1)

问题是,您只使用给定的答案映射返回数组的键。但是你需要一个带有空洞和错误值的数组。

要使用数组方法迭代稀疏数组,您需要将其转换为没有稀疏元素的数组,然后映射布尔值。

&#13;
&#13;
var quizCorrectAnswer = { 0: { 0: true }, 1: { 0: true, 3: true }, 2: { 2: true } },
    correctAns = [],
    correct,
    temp;
    
for (correct in quizCorrectAnswer) {
    temp = [];

    Object
        .keys(quizCorrectAnswer[correct])
        .forEach(k => temp[k] = quizCorrectAnswer[correct][k])

    correctAns.push(Array.apply(null, temp).map(Boolean));
}

console.log(correctAns);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 2 :(得分:0)

Array.from

您可以使用5将对象转换为数组。您可以使用Object.keys(obj).length

代替csvdir的静态长度

答案 3 :(得分:-1)

这是未出现的键和值的问题。 在关于键'1'的quizCorrectAnswer变量值中,只有'0'和'3'键。 该值中未定义“1”或“2”键和值。 并且Javascript map函数将现有键与值匹配,因此您只能获得{1}}关于'1'键(因为该值中只有2个键)。 因此,要获得所需的结果,您必须更改[true, true]值,如下所示。

quizCorrectAnswer