Javascript 有没有比这更好的方法,从数据集构建对象?

Javascript 有没有比这更好的方法,从数据集构建对象?,javascript,Javascript,如果我有 const data = [ { fieldA: 'a', fieldB: 1 }, { fieldA: 'b', fieldB: 2 }, { fieldA: 'c', fieldB: 3 }, ] const getRequiredDataForField = (data, field) => { const result = {}; data.forEach(element => result[element[field]]

如果我有

const data = [
    { fieldA: 'a', fieldB: 1 },
    { fieldA: 'b', fieldB: 2 },
    { fieldA: 'c', fieldB: 3 },
]

const getRequiredDataForField = (data, field) => {
    const result = {};
    data.forEach(element => result[element[field]] = element[field]);
    return result;
}
我可以通过做得到我想要的

console.log(getRequiredDataForField(data, 'fieldB'));

// output:
// {
//    1: 1,
//    2: 2,
//    3: 3,
// }

我觉得这是一种低效的方法-有更好的方法吗?

我觉得你的方法很好,但是如果你想要一种更实用的方法,你可以使用
对象。fromEntries
字段b
映射到一个具有两个副本的数组:

const数据=[
{fieldA:'a',fieldB:1},
{fieldA:'b',fieldB:2},
{fieldA:'c',fieldB:3},
]
常量getRequiredDataForField=(数据,字段)=>Object.fromEntries(
data.map(d=>[d[field],d[field]]
);

log(getRequiredDataForField(数据'fieldB'))
我觉得您的方法很好,但如果您想要更实用的方法,可以使用
对象。fromEntries
字段b
映射到一个包含两个副本的数组:

const数据=[
{fieldA:'a',fieldB:1},
{fieldA:'b',fieldB:2},
{fieldA:'c',fieldB:3},
]
常量getRequiredDataForField=(数据,字段)=>Object.fromEntries(
data.map(d=>[d[field],d[field]]
);
log(getRequiredDataForField(数据'fieldB'))
const数据=[
{fieldA:“a”,fieldB:1},
{fieldA:“b”,fieldB:2},
{fieldA:“c”,fieldB:3},
];
常量getRequiredDataForField=(数据,字段)=>
reduce((a,c)=>({…a[c[field]]:c[field]}),{});
log(getRequiredDataForField(数据'fieldB'))
log(getRequiredDataForField(数据,'fieldA'))
const数据=[
{fieldA:“a”,fieldB:1},
{fieldA:“b”,fieldB:2},
{fieldA:“c”,fieldB:3},
];
常量getRequiredDataForField=(数据,字段)=>
reduce((a,c)=>({…a[c[field]]:c[field]}),{});
log(getRequiredDataForField(数据'fieldB'))

log(getRequiredDataForField(data,'fieldA'))
你的方法比我的快25%。谢谢,我会用你的。怎么比你的@MikeK快25%呢?你能解释一下吗?我用
console.time(…)
console.timeEnd(…)
运行它,我的方法是0.2ms,他的方法是一致的0.15ms。我们的方法比我的方法快25%。谢谢,我会用你的。怎么比你的@MikeK快25%呢?你能解释一下吗?我用
console.time(…)
console.timeEnd(…)
运行它,我的方法是0.2ms,他的大约是一致的0.15ms。我们的方法非常好。奇怪的输出正是吸引我的地方。我可以问一个键和值有什么相同的用途吗?我可以更改逻辑,但我想为一个。我测试了一些硬编码的值,其工作方式似乎与文档在其示例中建议的方式相同(
{34:'İstanbul',63:'Şanlıurfa'}
)。所以,我想,在我的例子中,
{'red':'red','blue'}
是一种可行的方法。你的方法非常好。奇怪的输出正是吸引我的地方。我可以问一个键和值有什么相同的用途吗?我可以更改逻辑,但我想为一个。我测试了一些硬编码的值,其工作方式似乎与文档在其示例中建议的方式相同(
{34:'İstanbul',63:'Şanlıurfa'}
)。所以,我想在我的例子中,
{'red':'red','blue'}
是一种可行的方法。三元运算符在这里是多余的,你可以只
数据。reduce((a,c)=>({…a,[c[field]]:c[field]}),{})c[field]
三元运算符是多余的,所以您可以只
data.reduce((a,c)=>({…a,[c[field]]:c[field]}),{})因为总是有一个
c[字段]