Javascript 如果相同位置的项相等,则比较数组项(项为数组)

Javascript 如果相同位置的项相等,则比较数组项(项为数组),javascript,arrays,loops,comparison,Javascript,Arrays,Loops,Comparison,我正在使用Adobe ExtendScript工具包进行调试。我是为InDesign编写代码的,我对JavaScript的知识并不深(也不知道ES6是什么意思)。 ExtendScript不接受let作为保留字。也许你是想了解一下这个ES6? 我需要比较数组中的所有项,如果其中一个子项相同,则连接其中的一些项。让我解释一下: 基于以下数组: var array = [[1,"luis"] , [2,"felipe"] , [2,"erick"] , [2,"mark"] , [3,"dustin

我正在使用Adobe ExtendScript工具包进行调试。我是为InDesign编写代码的,我对JavaScript的知识并不深(也不知道ES6是什么意思)。 ExtendScript不接受let作为保留字。也许你是想了解一下这个ES6?

我需要比较数组中的所有项,如果其中一个子项相同,则连接其中的一些项。让我解释一下:

基于以下数组:

var array = [[1,"luis"] , [2,"felipe"] , [2,"erick"] , [2,"mark"] , [3,"dustin"]]
所以,我想得到这个数组的结果:

var array = [[1,"luis"] , [2,"felipe; erick; mark"] , [3,"dustin"]]
如何比较数组项以获得所需的结果

我已经试过两次了。 也许是我弄错了。正因为如此,我才来问你们

如果我使用这个:

for (var i=0; i<array.length-1; i++) {
    for (var j=i+1; j<array.length; j++) {
        if (array[i][0] == array[j][0]) {
            array[i][1] = array[i][1] + "; " + array[j][1];
            }
        }
    }

您可以使用
reduce

var数组=[
[1,“路易斯”],
[2,“felipe”],
[2,“埃里克”],
[2,“标记”],
[3,“达斯汀”]
]
const result=array.reduce(函数(re,arr){
常量项=重新查找(函数(o){
返回o[0]==arr[0]
})
项目类型==='未定义'?重新推送(arr):(项目[1]=项目[1]+';'+arr[1])
返回re
}, [])

console.log(result)
您可以使用
Object.entries()
和数组的
.reduce()
方法来获得所需的输出:

const data=[1,“路易斯”],[2,“菲利佩”],[2,“埃里克”],[2,“马克”],[3,“达斯汀”];
const result=Object.entries(data.reduce((r[key,val])=>{
r[key]=r中的键?[r[key].toString()+“;”+val]:val;
返回r;
}, {}));
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
您可以使用reduce和map

  • 子阵列中第一个元素的第一个分组
  • 将条目映射到所需格式
var数组=[[1,“路易斯”],[2,“菲利佩”],[2,“埃里克”],[2,“马克”],[3,“达斯汀”]]
设op=array.reduce((op,inp)=>{
op[inp[0]]=op[inp[0]]| |【】
op[inp[0]].推送(inp[1])
返回操作
},{})
让final=Object.entries(op.map)([key,value])=>[+key,value.join(';'))

console.log(最终版)
使用
Object.entries
reduce

var数组=[1,“路易斯”],[2,“菲利佩”],[2,“埃里克”],[2,“马克”],[3,“达斯汀”];
const res=Object.entries(array.reduce((a[n,s])=>(a[n]=a[n]?a[n]+“;”+s:s,a),{});
控制台日志(res)

.as控制台包装{max height:100%!important;top:auto;}
以下是解决方案

var数组=[[1,“路易斯”],[2,“菲利佩”],[2,“埃里克”],[2,“马克”],[3,“达斯汀”]]
函数mergeArrayBySameId(){
让老=[];
设mergedArr=[];
array.map(函数(curr,i){
设tmp=“”;
设电流=阵列[i];
设prev=(i==0)?[]:数组[i-1];
如果(当前[0]==上一个[0]){
tmp=电流[0];
mergedArr[0]=tmp;
如果(!mergedArr.includes(上一个[1])){
合并推送(上[1]);
}
合并数据推送(当前[1]);
}
旧=上一个;
});
让mergedStr=“”
设mergedArrId=mergedArr[0];
mergedArr.map(函数(val){
如果(val的类型!=='number'){
mergedStr+=val+“;”;
}
});
mergedArr=[];
mergedArr[0]=mergedArrId;
mergedArr[1]=mergedStr;
函数检查id(id){
返回mergedArr[0]!=id[0];
}
让filterray=array.filter(checkId);
让finalArray=filterary.concat([mergedArr]).sort();
返回最终射线;
}

log(mergeArrayBySameId())谢谢大家的建议。 我很抱歉,因为我是一个初学者,在为Adobe软件自动化编写代码时只熟悉javascript。 我找到了一种方法:

var array = [[1,"luis"] , [2,"felipe"] , [2,"erick"] , [2,"mark"] , [3,"dustin"]];
for (var i=0; i<array.length-1; i++) {
    var j = i+1;
    while (j < array.length) {
        if (array[i][0] == array[j][0]) {
            array[i][1] = array[i][1] + "; " + array[j][1];
            array.splice(j , 1);
            j = i;
            }
        j++;
        }
    }
alert(array.join("\r"));
var数组=[1,“路易斯”],[2,“菲利佩”],[2,“埃里克”],[2,“马克”],[3,“达斯汀”];

对于(var i=0;我正在Adobe ExtendScript工具包中使用此代码。您的代码片段对我不起作用。@LuisFelipeCorullón it此工具包不支持
ES6
,然后您可以使用它将此代码传输到
ES5
ESTK说我需要
,因为opBabel代码也不起作用。现在,ESTK说我的数组.reduce不起作用一个函数。我在Adobe ExtendScript工具箱中使用此代码。您的代码片段对我不起作用。我在Adobe ExtendScript工具箱中使用此代码。您的代码片段对我不起作用。
var array = [[1,"luis"] , [2,"felipe"] , [2,"erick"] , [2,"mark"] , [3,"dustin"]];
for (var i=0; i<array.length-1; i++) {
    var j = i+1;
    while (j < array.length) {
        if (array[i][0] == array[j][0]) {
            array[i][1] = array[i][1] + "; " + array[j][1];
            array.splice(j , 1);
            j = i;
            }
        j++;
        }
    }
alert(array.join("\r"));
let arr = [
    [1, "luis"],
    [3, "felipe"],
    [2, "erick"],
    [3, "mark"],
    [3, "dustin"]
];

let res = arr.reduce((acc,cur) => {
    const item = acc.find((obj) => {
        if(obj[0] === cur[0]){
            obj.push(cur[1]);
            return obj
        }
    });
    if(!item)
        acc.push(cur);
    return acc
},[]);