为什么这转向2d阵列?

时间:2018-05-10 13:37:14

标签: javascript arrays object

我在这里有一些模拟的对象问题(不介意他们的问题和选择是胡言乱语)

const questions = {
  iq_test: {
    questions: [
    {
      question: 'Find the difference', 
      choices: ['a1', 'a2', 'a1', 'a3'], 
      correct: 0
    }, 
    {
      question: 'What is the next sequence', 
      choices: ['2', '5', '56', '64'],
      correct: 3
    }, 
    { question: 'What should be the next letter', 
      choices: ['c', 'z', 'e', 'f'],
      correct: 3
    }]
  },
 memory_test: {
   ...omitted
 }
}

现在我想要iq_test

let retQuestions = Object.values(questions.iq_test).map(item => {
      console.log(item);
      return item;
})

地图中的console.log为我提供了这种格式

    [ { question: 'Find the difference',
    choices: [ 'a1', 'a2', 'a1', 'a3' ],
    correct: 0 },
  { question: 'What is the next sequence',
    choices: [ '2', '5', '56', '64' ],
    correct: 3 },
  { question: 'What should be the next letter',
    choices: [ 'c', 'z', 'e', 'f' ],
    correct: 3 } ]

但是当我在console.log中时,应该保存返回值的retQuestions我得到了不同的格式

console.log(retQuestions),如下所示,它变成了2d数组

[ [ { question: 'Find the difference', choices: [Array], correct: 0 },
    { question: 'What is the next sequence',
      choices: [Array],
      correct: 3 },
    { question: 'What should be the next letter',
      choices: [Array],
      correct: 3 } ] ]

我想再次映射到retQuestions以获取每个问题,但我不能,因为格式正在改变..

2 个答案:

答案 0 :(得分:0)

Object.values返回该对象中所有值的数组。由于questions.iq_test本身就是一个只有一个键值对的对象,因此在这种情况下你会得到一个二维数组。尝试记录一次。

对于您尝试实现的目标,您应该直接在对象的值上调用map。例如,

let retQuestions = questions.iq_test.questions.map(item => {
      console.log(item);
      return item;
});

答案 1 :(得分:0)

  

Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for ... in循环提供的顺序相同(不同之处在于for-in循环枚举属性)原型链也是如此。

因此,在您的情况下,您需要在package org.apache.http.client.test; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContextBuilder; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; public class ApacheHttpClientTest { private HttpClient httpClient; @Before public void initClient() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException { httpClient = HttpClients .custom() .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, TrustAllStrategy.INSTANCE).build()) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) .build(); } @Test public void apacheHttpClient455Test() throws IOException { executeRequestAndVerifyStatusIsOk("https://expired.badssl.com"); executeRequestAndVerifyStatusIsOk("https://wrong.host.badssl.com"); executeRequestAndVerifyStatusIsOk("https://self-signed.badssl.com"); executeRequestAndVerifyStatusIsOk("https://untrusted-root.badssl.com"); executeRequestAndVerifyStatusIsOk("https://revoked.badssl.com"); executeRequestAndVerifyStatusIsOk("https://pinning-test.badssl.com"); executeRequestAndVerifyStatusIsOk("https://sha1-intermediate.badssl.com"); } private void executeRequestAndVerifyStatusIsOk(String url) throws IOException { HttpUriRequest request = new HttpGet(url); HttpResponse response = httpClient.execute(request); int statusCode = response.getStatusLine().getStatusCode(); assert statusCode == 200; } } 上执行map,因为您只需返回questions.iq_test.questions,就可以避开item关键字。

return