javascript - 计算和删除嵌套数组中的多个元素

标签 javascript typescript

这是我的数组的结构:

arrayParent = [numbers, counter];

numbers = [1,1,1,2,4,5];
counter = [];

我想要做的是计算“number”中的多个元素,并在删除第一个元素时推送到“counter”,最后它应该看起来像这样:

numbers = [1,2,4,5];
counter = [3,1,1,1];

我尝试过这个(以及许多其他版本):

for(var y =0; y < arrayParent.length; y++){
 for(var x = 0; x < arrayParent[y].numbers.length; x++){
    var co = 1;
    for(var z = x+1; z < arrayParent[y].numbers.length; z++){
      if(arrayParent[y].numbers[x] == arrayParent[y].ans[z]){
          co++;
          arrayParent[y].numbers.splice(z);
          arrayParent[y].counter[x] = co;
       }
     }
   }
}

我得到的结果:

numbers = [1,2,4,5];
counter = [3,,,];

有什么解决办法吗?

最佳答案

你可以尝试这样的事情:

let numbers = [1,1,1,2,4,5];
let counter = [];

const tmp = numbers.reduce((res, curr) => ({
  ...res,
  [curr]: (res[curr] || 0) + 1
}), {});

numbers = Object.keys(tmp).map(Number);
counter = Object.values(tmp);

console.log(numbers, counter);

所以,我创建了一个计数器对象,其中键是不同的数字,值是它们的计数器

@nikhil 正确地注意到这个方法不会保留数字顺序,要保留它,只需将 JS 对象更改为 JS Map,逻辑是相同的:

let numbers = [1,1,1,2,5, 4];
let counter = [];

const tmp = numbers.reduce((res, curr) => res.set(curr, (res.get(curr) || 0) + 1), new Map());

numbers = [...tmp.keys()];
counter = [...tmp.values()];

console.log(numbers, counter);

关于javascript - 计算和删除嵌套数组中的多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52332929/

相关文章:

javascript - Ionic 3 和 Angular 4 - 未捕获( promise 中): TypeError: Cannot read property 'title' of undefined

javascript - iOS 10 Safari 浏览器注入(inject)电话号码链接

angular - 在 Angular 4/5 和 TypeScript 中重新加载同一页面

具有一些已知和一些未知属性名称的对象的 Typescript 接口(interface)

TypeScript 编译器 : generated sources, 根目录、排除和符号链接(symbolic link)

javascript - 为什么 js 在 '{}' 这样的语句中忽略 '{}[0]' ?

javascript - 在 emberjs 中绑定(bind) subview 和集合

javascript - Angular.copy 函数

typescript :函数返回带有参数字段的对象类型

typescript - 除 Promise 之外的任何对象?