在JavaScript中迭代对象

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

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循环遍历该对象,按顺序找到所有的'A'、'B'和'C',但我无法确保它们都属于同一个y项。

1
请记得在 const test 后面加上 = - xsami
2个回答

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]);


谢谢,这很棒。我应该学习如何正确使用它们。只是好奇,这是否可以使用for循环实现?谢谢。 - BlueishVelvet
当然,你可以使用for循环做任何事情 - 这正是我对for循环的问题所在。相比之下,使用数组方法提供更好的抽象,不需要手动迭代,并且可以更清晰地了解函数正在执行的操作。 - CertainPerformance

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"]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接