Javascript 基于字符串数组修改对象值
我一整天都在尽最大努力,但我找不到解决问题的有效办法 给你 我有一个对象,其中包含文件夹列表和每个文件夹中的文件数,如下所示:Javascript 基于字符串数组修改对象值,javascript,Javascript,我一整天都在尽最大努力,但我找不到解决问题的有效办法 给你 我有一个对象,其中包含文件夹列表和每个文件夹中的文件数,如下所示: let Folders = { 'listen': 0, 'listen_again_long': 0, 'intercations': 0, 'watch_again': 0, }; let Folders = { 'listen': 2, 'listen_again_long': 4, 'intercations': 0, '
let Folders = {
'listen': 0,
'listen_again_long': 0,
'intercations': 0,
'watch_again': 0,
};
let Folders = {
'listen': 2,
'listen_again_long': 4,
'intercations': 0,
'watch_again': 1,
};
以及一个名为result
的数组,该数组包含上述对象的父文件夹中的文件列表
let result = [
"https://example.com/test/media/instructions/listen/1.mp3",
"https://example.com/test/media/instructions/listen/2.mp3",
"https://example.com/test/media/instructions/listen_again_long/1.mp3",
"https://example.com/test/media/instructions/listen_again_long/2.mp3",
"https://example.com/test/media/instructions/listen_again_long/3.mp3",
"https://example.com/test/media/instructions/listen_again_long/4.mp3",
"https://example.com/test/media/instructions/watch_again/1.mp3",
]
我想根据结果
数组中表示的信息计算每个文件夹中的文件数(侦听…再次侦听\u long…
),并修改文件夹对象的数量
例如,在上面的示例代码中,我们有2个文件在listen内,4个文件在listen内,1个文件在watch内,在intercasions内没有。所以我们应该像这样取回物体:
let Folders = {
'listen': 0,
'listen_again_long': 0,
'intercations': 0,
'watch_again': 0,
};
let Folders = {
'listen': 2,
'listen_again_long': 4,
'intercations': 0,
'watch_again': 1,
};
迭代对象并检查像
folderA
,folderB
这样的键是否包含在结果数组的任何字符串中。您可以使用filter
&length获取包含键bu的字符串的计数。另外,创建一个新对象并指定键和计数,而不是在循环中改变现有对象
let文件夹={
“folderA”:0,
“folderB”:0,
“folderC”:0,
“folderD”:0,
}
让结果=[
"https://example.com/test/media/instructions/folderA/1.mp3",
"https://example.com/test/media/instructions/folderA/2.mp3",
"https://example.com/test/media/instructions/folderB/1.mp3",
"https://example.com/test/media/instructions/folderB/2.mp3",
"https://example.com/test/media/instructions/folderB/3.mp3",
"https://example.com/test/media/instructions/folderB/4.mp3",
"https://example.com/test/media/instructions/folderD/1.mp3",
];
让newFolder={};
用于(让关键帧进入文件夹){
让getCount=result.filter(item=>item.includes(keys)).length
newFolder[keys]=getCount
}
console.log(newFolder)
这可能会起作用:
let文件夹={
“侦听”:0,
“再次收听”:0,
“交互”:0,
“再次观看”:0,
};
让结果=[
"https://example.com/test/media/instructions/listen/1.mp3",
"https://example.com/test/media/instructions/listen/2.mp3",
"https://example.com/test/media/instructions/listen_again_long/1.mp3",
"https://example.com/test/media/instructions/listen_again_long/2.mp3",
"https://example.com/test/media/instructions/listen_again_long/3.mp3",
"https://example.com/test/media/instructions/listen_again_long/4.mp3",
"https://example.com/test/media/instructions/watch_again/1.mp3"
]
函数updateFolderScont(URL、文件夹){
URL.forEach(v=>{
const folder=v.match(/instructions\/(.+)\/)[1];//假设它总是像…instructions/{folder name}/。。。
folders[folder]=folders[folder]?folders[folder]+1:1;//如果文件夹还不存在,它将创建它
});
}
UpdateFolderScont(结果、文件夹);
console.log(文件夹)
谢谢您的回答。。这正是我以前做过的。。。也许我应该改变这些例子来告诉你这个问题。。。我不想简单地使用include,因为这些文件夹将一起计数listen:0,listen\u reach\u last:0,listen\u reach\u long:0,listen\u reach\u short:0,
然后使用String.match
@foxer谢谢你的回答。如果文件夹名称更改为listen:0,listen\u last:0,listen\u long:0,listen\u short:0,
和“'lets\u start':0',try\u':0',interactive\u再次]:0`