javascript - 动态添加对象到对象
问题描述
我有let prodObject = {schema: {}};
而且我有 ul 列表
<ul class="product-lists">
<li>CD Covers</li>
<li>DVD Covers</li>
<li>Cards</li>
<li>Posters</li>
<li>Cups</li>
</ul>
我想为 prodObject.schema 对象的列表中的每个项目添加对象。我希望最终对象看起来像这样。
schema: {
cdCovers: {
type: 'string',
title: 'CD Covers',
},
dvdCovers: {
type: 'string',
title: 'DVD Covers',
},
cards: {
type: 'string',
title: 'Cards',
},
posters: {
type: 'string',
title: 'Posters',
},
cups: {
type: 'string',
title: 'Cups',
},
}
};```
解决方案
这有两个部分。使用querySelectorAll选择所有元素,然后使用replace、toLowerCase和toUpperCase将对象键的标题转换为 camelCase :
const prodObject = {schema:{}};
Array.from( document.querySelectorAll( '.product-lists li' ), el => el.innerText ).forEach( title => {
const camelCaseTitle = title.replace( /^\w*/, x => x.toLowerCase( ) ).replace( /\s+(\w)(\w*)/, (_,f,r) => f.toUpperCase() + r.toLowerCase( ) );
prodObject.schema[ camelCaseTitle ] = { type: 'string', title };
} );
console.log( prodObject );
.product-lists {
display: none;
}
<ul class="product-lists">
<li>CD Covers</li>
<li>DVD Covers</li>
<li>Cards</li>
<li>Posters</li>
<li>Cups</li>
</ul>
推荐阅读
- graphql - 无需 GUI 即可收听 graphql 订阅的独立客户端
- vb.net - 当我将鼠标悬停在 XAML/VB 中时,如何禁用变蓝的按钮?
- angular - 包含不记名令牌时 HttpClient 请求失败
- rxjs - 如何取消来自许多角度 8 的待处理 http 请求之一
- ruby-on-rails - 如何将语法突出显示应用于 ActiveAdmin 行?
- java - 如何使用端口转发通过 netsh 连接到 Oracle 数据库?
- django - 从 Django App Engine 查询 BigQuery 数据集
- firebase - 如何为firebase firestore中的特定集合设置不同的规则
- javascript - 我可以在 jsdoc 中使用 typescript 实用程序类型吗?
- javascript - 如何使 div 滚动到其容器的底部,然后在 React 中完成后向上滚动?