使用键/代码转换JavaScript数组

时间:2016-05-04 03:38:26

标签: javascript

我需要帮助一个可以在JavaScript中将数组A转换为数组B的函数

数组A:

[ { id: 'U125H069G', code: 'C13LKL4V6' },
  { id: 'U13MPMLA3', code: 'C13LKL4V6' },
  { id: 'U125H069G', code: 'C125H083C' },
  { id: 'U13MPMLA3', code: 'C125H083C' },
  { id: 'U125H069G', code: 'C123Q00D9' },
  { id: 'U13MPMLA3', code: 'C123Q00D9' },
  { id: 'U125H069G', code: 'C13LM1VUP' } ]

数组B:

[{'id':'U125H069G', codes: ['C13LKL4V6','C125H083C','C123Q00D9', 'C13LM1VUP]},
  {'id':'U13MPMLA3': codes: ['C13LKL4V6','C125H083C','C123Q00D9']}]

3 个答案:

答案 0 :(得分:1)

您设计的对象应该是

{'id':'U125H069G', codes: ['C13LKL4V6','C125H083C','C123Q00D9', 'C13LM1VUP']}

而不是

{'id':'U125H069G', codes: {'C13LKL4V6','C125H083C','C123Q00D9', 'C13LM1VUP'}}

试试这个

var temp = [];

data.forEach(function(x) {
  if (temp.map(function(y) {
      return y.id
    }).indexOf(x.id) < 0) {
    var codes = data.filter(function(z) {
      return z.id == x.id;
    }).map(function(z) {
      return z.code;
    });
    temp.push({
      id: x.id,
      codes: codes
    });
  }
})

console.log(temp);

DEMO

答案 1 :(得分:1)

通过forEach运行它并在对象图中存储唯一ID。

var input = [ 
  { id: 'U125H069G', code: 'C13LKL4V6' },
  { id: 'U13MPMLA3', code: 'C13LKL4V6' },
  { id: 'U125H069G', code: 'C125H083C' },
  { id: 'U13MPMLA3', code: 'C125H083C' },
  { id: 'U125H069G', code: 'C123Q00D9' },
  { id: 'U13MPMLA3', code: 'C123Q00D9' },
  { id: 'U125H069G', code: 'C13LM1VUP' } 
];

var idMap={};
var output =[];

input.forEach(function(value, index, arr) {
  
    if(!idMap[value.id]) {
        idMap[value.id] = { id: value.id, codes:[value.code]};  
        output.push(idMap[value.id]);
    }
    else {
        idMap[value.id].codes.push(value.code);
    }  
  
}); 

console.log(output);
document.getElementById("output").innerHTML = JSON.stringify(output);

/*[{'id':'U125H069G', codes: {'C13LKL4V6','C125H083C','C123Q00D9', 'C13LM1VUP}},
  {'id':'U13MPMLA3': codes: {'C13LKL4V6','C125H083C','C123Q00D9'}}]
  */
<textarea id="output" rows="10" cols=80>
    
</textarea>

答案 2 :(得分:1)

基本上只是循环遍历它们,当你找到一个新的id时向B添加一个对象,或者如果id已经存在,则在条目数组中添加一个条目。

&#13;
&#13;
 int[] arr = {3, 2, 0, 5, 3};

 HashMap<Integer, String> h = new HashMap<Integer, String>() {{
      put(0,"This is my third sentence.");
      put(3,"This is my first sentence.");
      put(5,"This is my forth sentence.");
      put(2,"This is my second sentence.");
 }};
&#13;
&#13;
&#13;

forEach
some