如何在对象内部的对象中执行功能?

时间:2019-02-01 01:02:02

标签: javascript

我在stackoverflow中发现了一个随机播放对象的函数,但是我需要随机播放该对象内部的对象:

为便于理解,我在console.log中复制了一部分对象:

(2) [{…}, {…}]
0:
component: Array(6)
0: {id: 91, type_desc: "enunciado", content: "O novo Guia Alimentar para a População Brasileira"}
1: {id: 92, type_desc: "alternativa", content: "são geralmente consumidos em pequenas"}
2: {id: 93, type_desc: "alternativa", content: "são formulados e embalados para serem"}
3: {id: 94, type_desc: "alternativa", content: "tendem a ter pouca fibra, em decorrência da"}
4: {id: 95, type_desc: "alternativa", content: "apresentam embalagens e conteúdos diferenciados"}
5: {id: 96, type_desc: "alternativa", content: "possuem uma baixa quantidade de calorias por"}
length: 6
__proto__: Array(0)
id: 16
question_content_id: 1
__proto__: Object
1:
component: Array(6)
0: {id: 31, type_desc: "enunciado", content: "A partir das ideias sugeridas pela charge, avalie as "}
1: {id: 32, type_desc: "alternativa", content: "As asserções I e II são proposições verdadeiras,"}
2: {id: 33, type_desc: "alternativa", content: "As asserções I e II são proposições verdadeiras, mas a II não"}
3: {id: 34, type_desc: "alternativa", content: "A asserção I é uma proposição verdadeira, e a II é "}
4: {id: 35, type_desc: "alternativa", content: "A asserção I é uma proposição falsa, e a II é uma"}
5: {id: 36, type_desc: "alternativa", content: "As asserções I e II são proposições falsas"}
length: 6
__proto__: Array(0)
id: 6
question_content_id: 1
__proto__: Object

我在问题中使用了该函数,但我想在组件中使用:

api.get("/evaluation/" + this.state.evaluation_id + "/")
                        .then(response => {
                            this.setState({
                                questions: shuffleArray(response.data.question)
)}

2 个答案:

答案 0 :(得分:1)

有一些方法可以解决您的问题。其中之一是实现shuffleQuestions函数,为此,您可以使用shuffleArray函数:

function shuffleArray(array) {
  var currentIndex = array.length, temporaryValue, randomIndex
 
  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex)
    currentIndex -= 1

    // And swap it with the current element.
    temporaryValue = array[currentIndex]
    array[currentIndex] = array[randomIndex]
    array[randomIndex] = temporaryValue
  }

  return array
}

function shuffleQuestions(questions) {
  questions = shuffleArray(questions)
  questions.forEach((v, index) => {
    questions[index]['component'] = shuffleArray(questions[index]['component'])
  })
  return questions
}

let questions = [
  {id: 3, component: [{id: 1}, {id: 2}, {id: 3}]},
  {id: 1, component: [{id: 1}, {id: 2}, {id: 3}]},
  {id: 2, component: [{id: 1}, {id: 2}, {id: 3}]}
]

console.log(shuffleQuestions(questions))

我希望我不要误会你的问题

答案 1 :(得分:0)

可以提供您要说的数组吗?

无论如何,我可以为您的问题提供逻辑。 试试这个:

    for(var i = 0; i < array.length; i++){
        array[i] = shuffleArray(array[i]);
    }

    array = shuffleArray(array);