Javascript 选择具有特定元素值的数组
这让我快发疯了,几个小时来我一直在想怎么做这件事 我要做的是选择所有具有特定值的数组项。这是最容易用例子解释的: 我有一个数组,叫做media[]。它保存我的媒体库中的所有媒体。它有两个注释属性:路径和库,或媒体[x][0]和媒体[x][1] 我想选择属于某个库的所有媒体对象,然后将它们添加到该库中。这就是我挣扎的地方,它让我发疯 以下是我在尝试做这件事时的笨拙尝试。。。这是一些非常混乱的代码,而且大部分是毫无意义的,我只是提供它,以便您能够了解我对此有多么无知。请注意,我现在拥有的所有代码实际上都没有尝试做任何事情;到目前为止,我所做的一切最终都会成为一个中断的for或while循环,它要么什么都不做,要么崩溃Javascript 选择具有特定元素值的数组,javascript,arrays,loops,object,Javascript,Arrays,Loops,Object,这让我快发疯了,几个小时来我一直在想怎么做这件事 我要做的是选择所有具有特定值的数组项。这是最容易用例子解释的: 我有一个数组,叫做media[]。它保存我的媒体库中的所有媒体。它有两个注释属性:路径和库,或媒体[x][0]和媒体[x][1] 我想选择属于某个库的所有媒体对象,然后将它们添加到该库中。这就是我挣扎的地方,它让我发疯 以下是我在尝试做这件事时的笨拙尝试。。。这是一些非常混乱的代码,而且大部分是毫无意义的,我只是提供它,以便您能够了解我对此有多么无知。请注意,我现在拥有的所有代码实际
// this function is meant to return an array of all media items
// that belong in a certain gallery... didn't get that far because
// the loops tripped me up
function getTheMedia (galNum) {
var output = [];
for (var i = 0; i < media.length; ++i) {
// I tried using an if statement here to check if the
// media[i][1] == galNum, and if so, add it to the output
// but that didn't work
output.push(media[i]);
}
return output;
}
// this function was actually my first attempt but I kept running into
// the same issue as above
function fillGal () {
/*
var output = [];
for (var i = 0; i < Gallery.length; ++i) {
output.push(Gallery[i]);
}
*/
var output = [];
var i = 0;
while (i < media.length) {
output.push(i);
i++;
}
console.log(output);
}
这是相当随意的
请注意,我将从多个阵列转换为单个阵列的主要原因是,最终我计划扩展此应用程序,我认为将所有媒体存储在单个数据库中更有意义。可以设置图库地图:
const galleries = new Map();
然后填写您的媒体:
media.forEach( ([path, gallery]) => {
if( galleries.has(gallery) ){
galleries.get(gallery).push(path);
} else {
galleries.set(gallery, [path]);
}
});
现在,您可以在图库中获得如下路径:
console.log(galleries.get("somegallery"));
var output = media.filter(function(m) {
return m[1] == galNum;
});
console.log('gal 0');
console.log(getTheMedia(0));
console.log('gal 1');
console.log(getTheMedia(1));
Javascript数组有一个过滤函数,如下所示: console.log[0,1,2,3,4,5,6,7,8,9,10].filterv=>v==0你可以这样简单地使用:
console.log(galleries.get("somegallery"));
var output = media.filter(function(m) {
return m[1] == galNum;
});
console.log('gal 0');
console.log(getTheMedia(0));
console.log('gal 1');
console.log(getTheMedia(1));
为什么不用JS符号定义您的库和库条目,如:
var galleries = [
{
id: 1,
name: "new",
medias: [
{
img: "new/316.png",
name: 316
},
{
img: "new/home.png",
name: "Going Home"
}
]
},
{
id: 2,
name: "index",
medias: []
}
]
这样,您就能够可视化数据结构,从而使您更容易遍历、添加和删除元素。尝试getTheMedia函数的这种实现
function getTheMedia (galNum) {
return media.filter(function(item){return item && item[1] === galNum;});
}
您可以这样测试它:
console.log(galleries.get("somegallery"));
var output = media.filter(function(m) {
return m[1] == galNum;
});
console.log('gal 0');
console.log(getTheMedia(0));
console.log('gal 1');
console.log(getTheMedia(1));
同时发布您的示例数据。我相信@Lalit的建议是正确的,即问题可能不在您的代码中,而在您的数据中。我还建议使用media.filter实现yur gethemedia功能。关于过滤器的更多信息请参见:我将查看地图-您的代码的其余部分现在有点混乱,因此我将首先阅读地图。否则,我可能只需要一个突破这是如此美丽和简单,我想尖叫亵渎。非常感谢你!真希望我的谷歌搜索在几个小时前就出现了。。。哈哈。@aprovokedkiwi-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh