Javascript对象搜索

时间:2015-01-16 19:25:31

标签: javascript arrays

我有这个代码:(它读取mp3文件的文件夹并检索所有路径)

var base = "../media/audio/";

var arr1 = [
    {path:"../media/audio/Numbers/Cat1/01.mp3"},
    {path:"../media/audio/Numbers/Cat1/02.mp3"},
    {path:"../media/audio/Numbers/Cat1/03.mp3"},
    {path:"../media/audio/Numbers/Cat1/04.mp3"},

    {path:"../media/audio/Letters/Cat1/01.mp3"},
    {path:"../media/audio/Letters/Cat1/02.mp3"},
    {path:"../media/audio/Letters/Cat1/03.mp3"},

    {path:"../media/audio/Color/Cat1/01.mp3"},
    {path:"../media/audio/Color/Cat1/02.mp3"},
    {path:"../media/audio/Color/Cat1/03.mp3"}
];

我想得到这个:

var arr2 = [
[{
    category:"Numbers", 
    path:[
        {path:"../media/audio/Numbers/Cat1/01.mp3"},
        {path:"../media/audio/Numbers/Cat1/02.mp3"},
        {path:"../media/audio/Numbers/Cat1/03.mp3"},
        {path:"../media/audio/Numbers/Cat1/04.mp3"}
    ]
}],
[{
    category:"Letters", 
    path:[
        {path:"../media/audio/Letters/Cat1/01.mp3"},
        {path:"../media/audio/Letters/Cat1/02.mp3"},
        {path:"../media/audio/Letters/Cat1/03.mp3"}
    ]
}],
[{
    category:"Color", 
    path:[
        {path:"../media/audio/Color/Cat1/01.mp3"},
        {path:"../media/audio/Color/Cat1/02.mp3"},
        {path:"../media/audio/Color/Cat1/03.mp3"}
    ]
}]
];

查找'base'字符串后面的每个类别,将它们拆分为数组,在每个数组和对象中使用category和path属性。

2 个答案:

答案 0 :(得分:1)

你走了。



var output = document.getElementById("output");

function splitSearch(base, arr1) {
  var categoryList = {};
  var baseLen = base.length;

  // Split paths into categories
  arr1.forEach(function(inPath) {
      var subPath = inPath.path.substr(baseLen);
      var category = subPath.split("/")[0];
      if (!categoryList.hasOwnProperty(category)) {
        categoryList[category] = [];
      }
      categoryList[category].push(inPath);
    });
  
  // Transform categoryList into array format requested
  var arr2 = [];
  for (var category in categoryList) {
    arr2.push({ category: category, path: categoryList[category] });
  }
  
  return arr2;
}

var base = "../media/audio/";

var arr1 = [
    {path:"../media/audio/Numbers/Cat1/01.mp3"},
    {path:"../media/audio/Numbers/Cat1/02.mp3"},
    {path:"../media/audio/Numbers/Cat1/03.mp3"},
    {path:"../media/audio/Numbers/Cat1/04.mp3"},

    {path:"../media/audio/Letters/Cat1/01.mp3"},
    {path:"../media/audio/Letters/Cat1/02.mp3"},
    {path:"../media/audio/Letters/Cat1/03.mp3"},

    {path:"../media/audio/Color/Cat1/01.mp3"},
    {path:"../media/audio/Color/Cat1/02.mp3"},
    {path:"../media/audio/Color/Cat1/03.mp3"}
];

var result = splitSearch(base, arr1);

output.innerHTML += JSON.stringify(result);

<div id="output" />
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这就是你要找的东西:

var arr1 = [
    {path:"../media/audio/Numbers/Cat1/01.mp3"},
    {path:"../media/audio/Numbers/Cat1/02.mp3"},
    {path:"../media/audio/Numbers/Cat1/03.mp3"},
    {path:"../media/audio/Numbers/Cat1/04.mp3"},

    {path:"../media/audio/Letters/Cat1/01.mp3"},
    {path:"../media/audio/Letters/Cat1/02.mp3"},
    {path:"../media/audio/Letters/Cat1/03.mp3"},

    {path:"../media/audio/Color/Cat1/01.mp3"},
    {path:"../media/audio/Color/Cat1/02.mp3"},
    {path:"../media/audio/Color/Cat1/03.mp3"}
];

var basePath = "\.\.\/media\/audio\/";
var regex = new RegExp('^' + basePath + '(.*?)\/');

var categories = {}, arr2 = [];

for (var i=0, x=arr1.length; i < x; i++) {
    var category = arr1[i].path.match(regex)[1];

    if (!categories[category]) {        
        arr2.push({ 
           category : category,
           path : []
        });
        categories[category] = true;
    }

    for (var ii=0, l = arr2.length; ii < l; ii++) {
        if (arr2[ii].category == category) {
           arr2[ii].path.push(arr1[i]);
           break;
        }
    }
}

可能会被清理一下但是应该让你到达你需要去的地方