Javascript 如何在普通JS上创建数组?

Javascript 如何在普通JS上创建数组?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我不确定是否应该称之为规范化,但我没有想到更好的名称,因此任务: 我有一个对象数组,我们称之为mainData,它包含obj1和obj2,其中一个属性是对象的数组someData。某些数据中的对象及其数量各不相同。我想使用获取主数据,但每个包含对象的对象在某些数据中应该具有相同的对象,如: 我有: 我想: let obj1 = { someData: [ { name: 'Name 1', value: 1111,

我不确定是否应该称之为规范化,但我没有想到更好的名称,因此任务: 我有一个对象数组,我们称之为mainData,它包含obj1和obj2,其中一个属性是对象的数组someData。某些数据中的对象及其数量各不相同。我想使用获取主数据,但每个包含对象的对象在某些数据中应该具有相同的对象,如: 我有:

我想:

let obj1 = {
    someData: [
        {
            name: 'Name 1',
            value: 1111,
        },
        {
            name: 'Name 2',
            value: 2222,
        },
        {
            name: 'Name 3',
            value: 3333,
        },
        {
            name: 'Name 4',
            value: null,
        },
        {
            name: 'Name 5',
            value: null,
        }        
    ]
}

let obj2 = {
    someData: [
        {
            name: 'Name 1',
            value: 1111,
        },
        {
            name: 'Name 2',
            value: 2222,
        },
        {
            name: 'Name 3',
            value: null,
        },
        {
            name: 'Name 4',
            value: 4444,
        },
        {
            name: 'Name 5',
            value: 5555,
        }
    ]
}

试试这个。循环遍历每个数组并检查对象是否在另一个数组中。如果不是,则使用null值推送该值。请在下面找到一个样本

设obj1={ 一些数据:[ { 姓名:姓名1, 价值:1111 }, { 姓名:姓名2,, 价值:2222 }, { 姓名:姓名3,, 价值:3333 } ] }; 设obj2={ 一些数据:[ { 姓名:姓名1, 价值:1111 }, { 姓名:姓名2,, 价值:2222 }, { 姓名:姓名4,, 货值:4444 }, { 姓名:姓名5,, 价值:5555 } ] }; obj1.someData.forEachobj=>{ const itemUnsecondArray=obj2.someData.find item=>item.name==obj.name ; if!itemUnsecondArray{ obj2.someData.push{ 名称:obj.name, 值:null }; } }; obj2.someData.forEachobj=>{ const itemInFirstArray=obj1.someData.find item=>item.name==obj.name ; 如果!itemInFirstArray{ obj1.someData.push{ 名称:obj.name, 值:null }; } }; //分类 obj1.someData.sorta,b=>a.namea.nameconsole.logobj2 您可以存储一个唯一名称数组。并遍历每个数据,如果有名称,则保持相同,否则添加一个值为null的新数据

const getNames=arr=>arr.mapel=>el.name const buildNewDataFromUniqueNames=arr,uniqueNames=> uniqueNames.mapname=>{ const el=arr.findel=>el.name==name 返回el | |{name,value:null} } const uniqueNames=Array.from 新集合[…getNamesdata1,…getNamesdata2] console.log{someData:buildNewDataFromUniqueNamesdata1,uniqueNames} console.log{someData:buildNewDataFromUniqueNamesdata2,uniqueNames} 完整代码 设{someData:data1}={ 一些数据:[ { 名称:“名称1”, 价值:1111 }, { 名称:“名称2”, 价值:2222 }, { 名称:“名称3”, 价值:3333 } ] } 设{someData:data2}={ 一些数据:[ { 名称:“名称1”, 价值:1111 }, { 名称:“名称2”, 价值:2222 }, { 名称:“名称4”, 货值:4444 }, { 名称:“名称5”, 价值:5555 } ] } const getNames=arr=>arr.mapel=>el.name const buildNewDataFromUniqueNames=arr,uniqueNames=> uniqueNames.mapname=>{ const el=arr.findel=>el.name==name 返回el | |{name,value:null} } const uniqueNames=Array.from 新集合[…getNamesdata1,…getNamesdata2] console.log{someData:buildNewDataFromUniqueNamesdata1,uniqueNames}
console.log{someData:buildNewDataFromUniqueNamesdata2,uniqueNames}这里是一个通用函数,它不依赖于像name或value这样的硬编码属性名称,而是以键属性的名称作为参数,并在需要时将任何其他属性设置为null

该函数使用一个映射来保证在另一个数组中高效地查找一个项,从而避免了使用find和类似方法所带来的实时复杂性

结果数组也将按key属性的大小排序:

函数a,b,key=name{ if!b.长度返回[…a]; 让模板={}; 对于b[0]模板中的let prop[prop]=null; 让map=newmapa.mapo=>o[key],o]; 让我们来看看b的o{ 让match=map.geto[key]; 如果!match map.seto[key],{…template[key]:o[key]}; } 返回[…map.values].sorta,b=>+a[key]>b[key]| |-a[key]console.logobj2 您可以获取所有排序的名称,并将此数组与其他数组的数据映射,或者获取具有空值的新对象

常数 map=source,i=0=>name=>source[i]?。name===name ? 源代码[i++] :{name,value:null}, array1=[{name:'name 1',value:1111},{name:'name 2',value:2222},{name:'name 3',value:3333}], array2=[{name:'name 1',value:1111},{name:'name 2',value:2222},{name:'name 4',value:4444},{name:'name 5',value:5555}], 名称=[…新集合[…数组1,…数组2]。映射{name}=>name]。排序, 结果1= names.MapArray1, 结果2=names.maparray2; console.logresult1; console.logresult2;
.作为控制台包装{最大高度:100%!重要;顶部:0;}是否要保持相同的顺序?你试过什么?@NinaScholz我想规范化所有对象中的某些数据,然后按名称按字母顺序对某些数据排序。
let obj1 = {
    someData: [
        {
            name: 'Name 1',
            value: 1111,
        },
        {
            name: 'Name 2',
            value: 2222,
        },
        {
            name: 'Name 3',
            value: 3333,
        },
        {
            name: 'Name 4',
            value: null,
        },
        {
            name: 'Name 5',
            value: null,
        }        
    ]
}

let obj2 = {
    someData: [
        {
            name: 'Name 1',
            value: 1111,
        },
        {
            name: 'Name 2',
            value: 2222,
        },
        {
            name: 'Name 3',
            value: null,
        },
        {
            name: 'Name 4',
            value: 4444,
        },
        {
            name: 'Name 5',
            value: 5555,
        }
    ]
}