在JavaScript中迭代对象

时间:2018-05-02 00:27:47

标签: javascript algorithm

如果我有一个对象,就像这样:

const test = [
  { x: 'A', y:'1' },
  { x: 'A', y:'2' },
  { x: 'B', y:'1' },
  { x: 'A', y:'3' },
  { x: 'C', y:'1' },
];

如何通过它,从x找到顺序[A, B, C],其中[A, B, C]属于唯一的y?

到目前为止,我尝试使用for循环迭代对象,按顺序查找所有' B' C' C',但是我无法确保它们都属于同一个y项目。

2 个答案:

答案 0 :(得分:3)

将数组转换为数组对象,首先只对应一个特定y

const test = [
  { x: 'A', y:'1' },
  { x: 'A', y:'2' },
  { x: 'B', y:'1' },
  { x: 'A', y:'3' },
  { x: 'C', y:'1' },
];
const reducedToYs = test.reduce((accum, { x, y }) => {
  accum[y] = (accum[y] || '') + x;
  return accum;
}, {});
const found = Object.entries(reducedToYs)
  .find(([y, str]) => str.includes('ABC'));
console.log('y: ' + found[0] + ', entire string: ' + found[1]);

答案 1 :(得分:0)

创建一个获取目标Y值的函数。循环遍历测试数组并将y值与目标值进行比较,如果匹配,则将x值推入数组。然后返回该数组。

如果需要字符串(" ABC)"然后,而不是创建一个数组创建一个字符串,并将x值附加到它,以构建随后返回的字符串。



const test = [
  { x: 'A', y:'1' },
  { x: 'A', y:'2' },
  { x: 'B', y:'1' },
  { x: 'A', y:'3' },
  { x: 'C', y:'1' },
];



function testValue(str) {
    let xArray = [];
    test.forEach(function(item) { 
      if(item['y'] === str) {xArray.push(item['x'])}
   })
  return xArray;
  }
  
console.log(testValue('1')) // gives ["A", "B", "C"]