我有一些键数组,我想通过reduce将这样的键添加为空对象的计算值(不包括代码)作为属性:
const f = ['a','b','c'].reduce((obj,key) => obj[key]='', {})
我期望obj是累加器{},所以我以这种方式添加了属性?我如何通过减少这项工作?
我期望并希望该代码的结果如下:
{ a:'', b:'', c:'' }
但是我的代码仅在控制台上导致空字符串。我该如何实现?
答案 0 :(得分:4)
reduce回调返回的值将是下一次迭代的累加器。因此,在您的代码中, select substring(drug_id,1,CHARINDEX('-',drug_id)) + convert(varchar,cast(substring(drug_id,CHARINDEX('-',drug_id)+1,len(drug_id)) as int)) id from tbl_Receiving
order by cast(substring(drug_id,CHARINDEX('-',drug_id)+1,len(drug_id)) as int)
仅引用第一次迭代中的对象-在下一次迭代中,它引用obj
解析为的对象,即空字符串。
改为返回对象:
obj[key] = ''
如果需要,可以改用const f = ['a', 'b', 'c'].reduce((obj, key) => {
obj[key] = '';
return obj;
}, {});
console.log(f);
(尽管它是非常新的,所以为了获得良好的跨浏览器支持,请添加一个polyfill)
Object.fromEntries