Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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 JS:只对对象数组中的一个字段进行排序_Javascript - Fatal编程技术网

Javascript JS:只对对象数组中的一个字段进行排序

Javascript JS:只对对象数组中的一个字段进行排序,javascript,Javascript,我有下一个数组结构: const arr = [ { label: 'Apple', data: [{test: '1'}, {test: '2'}], collapsedData: [{test: '1'}, {test: '2'}], }, { label: 'Orange', data: [{test: '3'}, {test: '4'}], collapsedData: [{test: '3'},

我有下一个数组结构:

const arr = [
   {
      label: 'Apple',
      data: [{test: '1'}, {test: '2'}],
      collapsedData: [{test: '1'}, {test: '2'}],

   },
   {
      label: 'Orange',
      data: [{test: '3'}, {test: '4'}],
      collapsedData: [{test: '3'}, {test: '4'}],
   },
   {
      label: 'Tomato',
      data: [{test: '5'}, {test: '6'}],
      collapsedData: [{test: '5'}, {test: '6'}],

   },
   {
      label: 'Banana',
      data: [{test: '7'}, {test: '8'}],
      collapsedData: [{test: '7'}, {test: '8'}],
   }
]
我还提供了一种对数组排序的方法——
sortArr
——按字母表对数组排序

我需要迭代
arr
并将
sortArr
应用于
data
collapsedData
,如果标签是
Apple

因此,
data
collapsedData
应该为
Apple
标签排序

期望输出:

const outputArr = [
   {
      label: 'Apple',
      data: [{test: '2'}, {test: '1'}],
      collapsedData: [{test: '2'}, {test: '1'}],

   },
   {
      label: 'Orange',
      data: [{test: '3'}, {test: '4'}],
      collapsedData: [{test: '3'}, {test: '4'}],
   },
   {
      label: 'Tomato',
      data: [{test: '5'}, {test: '6'}],
      collapsedData: [{test: '5'}, {test: '6'}],

   },
   {
      label: 'Banana',
      data: [{test: '7'}, {test: '8'}],
      collapsedData: [{test: '7'}, {test: '8'}],
   }
]
解决方案是什么?

请查看以下内容:

function sortExceptApples(arr){
    for (let i = 0; i < arr.length; i++)
      if (arr[i].label !== "Apple")
        arr[i] = { ...arr[i], data: sortArr(arr[i].data), collapsedData: sortArr(arr[i].collapsedData) }
 return arr
}
根据你的问题

我需要迭代
arr
并对数据应用sortArr,如果标签是Apple,则折叠数据

  • 首先用
    arr.filter(x=>x.label=='Apple')
    过滤你的
    arr
    ,只获取
    Apple
    记录
  • 然后用
    forEach
    对其进行循环,并对内部对象
    data
    &
    collapsedData
  • 请记住,
    数据
    对象
    数组
    ,因此需要使用其属性值进行筛选,如
    a.test
    。我在
    a.test
    之前附加了
    +
    ,它将值转换为
    数字
  • 您可以检查下面的输出

    const arr=[
    {
    标签:“苹果”,
    数据:[{test:'2'},{test:'1'}],
    collapsedData:[{test:'2'},{test:'1'}],
    },
    {
    标签:“橙色”,
    数据:[{test:'3'},{test:'4'}],
    collapsedData:[{test:'3'},{test:'4'}],
    },
    {
    标签:“西红柿”,
    数据:[{test:'5'},{test:'6'}],
    collapsedData:[{test:'5'},{test:'6'}],
    },
    {
    标签:“香蕉”,
    数据:[{test:'7'},{test:'8'}],
    collapsedData:[{test:'7'},{test:'8'}],
    }
    ];
    常数t=()=>{
    arr.filter(x=>x.label=='Apple')
    .forEach(x=>{
    x、 数据排序((a,b)=>+a.test-+b.test);
    x、 collapsedData.sort((a,b)=>+a.test-+b.test);
    });
    返回arr;
    }        
    
    console.log(t())这是否回答了您的问题?一个循环和一个
    if
    @Andreas你能分享一个例子吗?
    for(让i=0;i
    arr是你的输出,它是一个数组。这个函数返回什么?如果我这样使用它:const t=()=>{return arr.filter(x=>x.label=='Apple').forEach(x=>{x.data.sort((a,b)=>+a.test-+b.test);x.collapsedData.sort((a,b)=>+a.test+b.test;});它返回未定义的
    forEach
    将不返回任何内容,因此您得到的是
    未定义。您需要添加
    return arr;`转到下一行。那它就会起到你所期望的作用。我还更新了我的答案。
    filter
    将返回
    array
    ,但
    forEach
    不会返回任何内容。所以你可以像
    constfilteredar=arr.filter(…)
    然后
    过滤数据。forEach(…)
    。然后
    返回filteredar
    let outputArr = sortExceptApples(arr)