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`