Javascript 如果相同位置的项相等,则比较数组项(项为数组)
我正在使用Adobe ExtendScript工具包进行调试。我是为InDesign编写代码的,我对JavaScript的知识并不深(也不知道ES6是什么意思)。 ExtendScript不接受let作为保留字。也许你是想了解一下这个ES6? 我需要比较数组中的所有项,如果其中一个子项相同,则连接其中的一些项。让我解释一下: 基于以下数组: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
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
},[]);