-4

我有一个名为的数组ItemArray,其元素如下

ItemArray[0]='44@Man'
ItemArray[1]='45@Cotton'
ItemArray[2]='44@Woman'

我想要的新数组应该NewItemArray如下

NewItemArray[0]='44@Man#Woman'
NewItemArray[1]='45@Cotton'
4

2 回答 2

1
var ItemArray = [];
ItemArray[0]='44@Man'
ItemArray[1]='45@Cotton'
ItemArray[2]='44@Woman'

// create intermediate array of objects
var aux = {};

$.each(ItemArray, function(idx, val){
    var key = val.split("@");
    // e.g key : ['44', 'Man']
    if (!aux[key[0]]){
        aux[key[0]] = [];
    }
    aux[key[0]].push(key[1]); 
});

console.log(aux);
/* aux looks like this:
   {
     44 : ['Man', 'Woman'],
     45 : ['Cotton']
   }
*/

// create final array based on the previous temporary array
var NewItemArray = [];

$.each(aux, function(idx, val){   
    NewItemArray.push(idx + '@' + val.join("#"));
});

console.log(NewItemArray)

小提琴:http: //jsfiddle.net/T9GNm/

于 2013-06-04T09:54:25.533 回答
1

这里有一些提示:

  • 您需要创建一个从数字到关联字符串的中间“映射”
  • JS“对象”是相当不错的地图
  • 用于在标志.split处拆分原始字符串@
  • 之前的数字@可以是地图的“关键”
  • 使用一个Array字符串作为映射中的值

如果你做了所有这些,你最终应该得到一个包含以下内容的对象:

var tmpObj = {
     44: ['Man', 'Woman'],
     45: ['Cotton']
 };
  • 您需要对其进行迭代以创建新数组
  • 用于.join将字符串数组与每个元素之间的分隔符组合起来
于 2013-06-04T09:26:21.513 回答