Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 已将具有多个数组中的键的对象转换为要排序的对象,现在希望它们恢复为已排序的数组_Javascript_Google Apps Script - Fatal编程技术网

Javascript 已将具有多个数组中的键的对象转换为要排序的对象,现在希望它们恢复为已排序的数组

Javascript 已将具有多个数组中的键的对象转换为要排序的对象,现在希望它们恢复为已排序的数组,javascript,google-apps-script,Javascript,Google Apps Script,在上面的程序中,我从数组中创建一个对象,例如名称、优先级等。在我对它们进行排序后,生成的对象如下所示: [ {“value”:1,“name”:“Fiona”,“prefer”:30,“year”:6}, {“value”:1,“name”:“Martin”,“prefer”:40,“year”:7}, {“value”:2,“name”:“Adam”,“prefer”:0,“year”:20}, {“value”:2,“name”:“Steve”,“prefer”:100,“year”:5}

在上面的程序中,我从数组中创建一个对象,例如名称、优先级等。在我对它们进行排序后,生成的对象如下所示:

[
{“value”:1,“name”:“Fiona”,“prefer”:30,“year”:6},
{“value”:1,“name”:“Martin”,“prefer”:40,“year”:7},
{“value”:2,“name”:“Adam”,“prefer”:0,“year”:20},
{“value”:2,“name”:“Steve”,“prefer”:100,“year”:5}
]
现在,排序完成后,我希望数组恢复到对象中的状态。 我试图得到如下数组:

value=[1,1,2,2],
姓名=['Fiona'、'Martin'、'Adam'、'Steve'],
偏好=[30,40,0100],
年份=[6,7,20,5]
谢谢您的帮助。

地图应该可以:

var values =selectValues;
    var names = selectNames;
    var priorities = prioritizedHours;
    var prefers = preferHrsArray;
    var years = workedYearsArray;
    var items = values.map((value, index) => {
                           return {
                           value: value,
                           name: names[index],
                           priority: priorities[index],
                           prefer: prefers[index],
                           year: years[index]
                           }
                           });
    var arrayObject = JSON.stringify(items);
    Logger.log('Object array: '+arrayObject);

请参见

您可以在这种情况下使用forEach

const数组=[
{“value”:1,“name”:“Fiona”,“prefer”:30,“year”:6},
{“value”:1,“name”:“Martin”,“prefer”:40,“year”:7},
{“value”:2,“name”:“Adam”,“prefer”:0,“year”:20},
{“value”:2,“name”:“Steve”,“prefer”:100,“year”:5}
]
常量值=[]
常量名称=[]
const prefers=[]
常数年=[]
array.forEach(rec=>{
值。推送(记录值),
name.push(rec.name),
首选项。推送(rec.Prefere),
年推送(记录年)
})
console.log(值)
console.log(名称)
console.log(首选)

console.log(years)
您还可以使用reduce,然后只获取您想要使用的列表,从而使其更具动态性

const arr=[
{“value”:1,“name”:“Fiona”,“prefer”:30,“year”:6},
{“value”:1,“name”:“Martin”,“prefer”:40,“year”:7},
{“value”:2,“name”:“Adam”,“prefer”:0,“year”:20},
{“value”:2,“name”:“Steve”,“prefer”:100,“year”:5}
];
常量{name,value,preference,year}=arr.reduce((acc,curr)=>{
Object.entries(curr.forEach)([key,val])=>{
如果(acc[键]==null)
acc[键]=[];
acc[键]。推送(val);
});
返回acc;
}, {})
console.log(名称);
console.log(值);
console.log(首选);

对数(年)到目前为止您尝试了什么?使用
数组.prototype.push()
for
循环应该可以完成这项工作。您知道有4个属性(
const{name,value,preference,year}=…
),但在
中,reduce()
调用时,您会表现得好像不知道它们一样。为什么?因为在
reduce()
中,我不关心存在什么属性。每个元素中可能有1000个属性——我只是将它们全部添加到一个大对象中,以便以后可以选择需要的属性。我尝试了一个更一般化的方法,因为OPs问题中给出的例子只是一个例子,它可能有更多的属性@Andreashis就是我所做的,除了我必须使用var sortedObj=JSON.stringify(items);我很高兴能帮助你:)
    const data = [
      { value: 1, name: "Fiona", prefer: 30, year: 6 },
      { value: 1, name: "Martin", prefer: 40, year: 7 },
      { value: 2, name: "Adam", prefer: 0, year: 20 },
      { value: 2, name: "Steve", prefer: 100, year: 5 },
    ];
    
    const values = data.map(x=>x.value);
    const names = data.map(x=>x.name);
    
    console.log(values, names);
    //[ 1, 1, 2, 2 ] [ 'Fiona', 'Martin', 'Adam', 'Steve' ]