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[字段]