JavaScript深度对象数组中的求和值

时间:2018-01-12 15:10:55

标签: javascript lodash

我一直在寻找解决方案并尝试不同的方法来获得我想要的解决方案数小时。我在下面有一个数组,我希望能够分别对数组做两件事。 (所以两个单独的功能)

功能1.我想总结所有"重量"值。 (即3 + 2 + 1 + 2 + 1 + 1 + 0)我尝试使用lodash sumBy,它在总结数组中的简单对象方面做得很好。

功能2.我希望能够遍历元素(我一直在尝试使用lodash来展平对象,但没有运气。)

我正在寻求任何帮助。如果这是一个新手问题,或者如果它的某些内容已经解决,我会道歉,因为某些原因我无法找到合适的搜索字词。

编辑: 目前使用es5,因此箭头功能不可用



var answers = [{
    '1': {
      id: '5aa2542e4e31482f1e',
      text: 'Employee',
      orderNo: 2,
      weight: 3,
    },
    '5': {
      id: '5a442e47339482f22',
      text: 'Worker',
      orderNo: 6,
      weight: 2,
    }
  },
  {
    '2': {
      id: '5a52442e4739482f51',
      text: 'Time Sensive',
      orderNo: 3,
      weight: 1,
    },
    '3': {
      id: '5a2442e47e3932f52',
      text: 'Group Sensitive',
      orderNo: 4,
      weight: 2,
    }
  },
  {
    id: '5a57d9375a5a7ac20317',
    text: 'Med',
    orderNo: 1,
    weight: 1
  },
  {
    id: '5a57da0755a7ac4691c',
    text: 'Med ',
    orderNo: 2,
    weight: 1
  },
  {
    id: '5a57da545aa7ac206220',
    text: 'Yes',
    orderNo: 1,
    weight: 0
  }
]

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

基本解决方案是扁平化阵列

using Proj_s.Models;
using Microsoft.EntityFrameworkCore;
    namespace mostlycode
    {
        public class ProjectContext : DbContext
        {
            public ProjectContext(DbContextOptions<ProjectContext> options) : base(options)    
    public DbSet<Project> Projects { get; set; }
            public DbSet<Worker> Workers{ get; set; }
           // public DbSet<ProjAssignment> ProjAssignments{ get; set; }
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Project>().ToTable("Project");
                modelBuilder.Entity<Worker>().ToTable("Worker");
               // modelBuilder.Entity<ProjAssignment>().ToTable("ProjAssignment");
            }
        }    
    }

之后你有一个数组数组

您可以使用reduce。

加入这些数组
const x = answers.map(obj => Object.values(obj))

要加权,你可以使用map和reduce

const flattenedAnswers = x.reduce((acc, item) => acc.concat(item), []);

要迭代这些项目,只需遍历扁平的答案数组

const sum = flattenedAnswers.map(item => item.weigt).reduce((acc, item) => acc + item), 0);

答案 1 :(得分:-1)

您可以按answers.forEach(answer => {...})

迭代数组元素

您可以按Object.keys(answer).forEach(key => {let val = answer[key]})

迭代答案属性

在每个 val 中查找每个answer 中的权重属性,如果有,请将其添加到变量中#&# 39;在foreach函数之外定义。