如果我有一个对象,就像这样:
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项目。
答案 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"]