Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择具有特定元素值的数组_Javascript_Arrays_Loops_Object - Fatal编程技术网

Javascript 选择具有特定元素值的数组

Javascript 选择具有特定元素值的数组,javascript,arrays,loops,object,Javascript,Arrays,Loops,Object,这让我快发疯了,几个小时来我一直在想怎么做这件事 我要做的是选择所有具有特定值的数组项。这是最容易用例子解释的: 我有一个数组,叫做media[]。它保存我的媒体库中的所有媒体。它有两个注释属性:路径和库,或媒体[x][0]和媒体[x][1] 我想选择属于某个库的所有媒体对象,然后将它们添加到该库中。这就是我挣扎的地方,它让我发疯 以下是我在尝试做这件事时的笨拙尝试。。。这是一些非常混乱的代码,而且大部分是毫无意义的,我只是提供它,以便您能够了解我对此有多么无知。请注意,我现在拥有的所有代码实际

这让我快发疯了,几个小时来我一直在想怎么做这件事

我要做的是选择所有具有特定值的数组项。这是最容易用例子解释的:

我有一个数组,叫做media[]。它保存我的媒体库中的所有媒体。它有两个注释属性:路径和库,或媒体[x][0]和媒体[x][1]

我想选择属于某个库的所有媒体对象,然后将它们添加到该库中。这就是我挣扎的地方,它让我发疯

以下是我在尝试做这件事时的笨拙尝试。。。这是一些非常混乱的代码,而且大部分是毫无意义的,我只是提供它,以便您能够了解我对此有多么无知。请注意,我现在拥有的所有代码实际上都没有尝试做任何事情;到目前为止,我所做的一切最终都会成为一个中断的for或while循环,它要么什么都不做,要么崩溃

// 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