我应该如何切片对象的对象数组

How should I slice the array of objects of objects

我有一个数组,如下所示:

[

{
    "1": {
        "id": 1,
        "price": 569.2,
        "marketcap": 94943213384.68,
        "timestamp": 1637136047,
        "datetime": "2021-11-17 08:00:47"
    },
    "2": {
        "id": 2,
        "price": 59745.7,
        "marketcap": 1127634159487.02,
        "timestamp": 1637136064,
        "datetime": "2021-11-17 08:01:04"
    },
    "3": {
        "id": 3,
        "price": 592.53,
        "marketcap": 11199494644.95126,
        "timestamp": 1637136053,
        "datetime": "2021-11-17 08:00:53"
    }
},
{
    "1": {
        "id": 1,
        "last30dcommits": null,
        "activity": "No Github Repo Found"
    },
    "2": {
        "id": 2,
        "last30dcommits": 109,
        "activity": "High Activity"
    },
    "3": {
        "id": 3,
        "last30dcommits": 44,
        "activity": "Medium Activity"
    }
},
{
    "1": {
        "id": 1,
        "change24h": -6.75,
        "change7d": -10.18,
        "change30d": 17.32,
        "timestamp24h": 1637035200,
        "timestamp7d": 1636516800,
        "timestamp30d": 1634529600
    },
    "2": {
        "id": 2,
        "change24h": -3.22,
        "change7d": -12.58,
        "change30d": -5.17,
        "timestamp24h": 1637035200,
        "timestamp7d": 1636516800,
        "timestamp30d": 1634529600
    },
    "3": {
        "id": 3,
        "change24h": -6.37,
        "change7d": -17.81,
        "change30d": -5.04,
        "timestamp24h": 1637035200,
        "timestamp7d": 1636516800,
        "timestamp30d": 1634529600
    }
},
{
    "1": {
        "tweetsRating": 44.04,
        "newsRating": 38.42
    },
    "2": {
        "tweetsRating": 14.76,
        "newsRating": -1.27
    },
    "3": {
        "tweetsRating": 0,
        "newsRating": 44.35
    } 
},
]

我正在前端实现分页,我将数组中每个对象中的每个对象切片为给定值,这样如果我切片 (0,2)

[

{
    "1": {
        "id": 1,
        "price": 569.2,
        "marketcap": 94943213384.68,
        "timestamp": 1637136047,
        "datetime": "2021-11-17 08:00:47"
    },
    "2": {
        "id": 2,
        "price": 59745.7,
        "marketcap": 1127634159487.02,
        "timestamp": 1637136064,
        "datetime": "2021-11-17 08:01:04"
    }
},
{
    "1": {
        "id": 1,
        "last30dcommits": null,
        "activity": "No Github Repo Found"
    },
    "2": {
        "id": 2,
        "last30dcommits": 109,
        "activity": "High Activity"
    }
},
{
    "1": {
        "id": 1,
        "change24h": -6.75,
        "change7d": -10.18,
        "change30d": 17.32,
        "timestamp24h": 1637035200,
        "timestamp7d": 1636516800,
        "timestamp30d": 1634529600
    },
    "2": {
        "id": 2,
        "change24h": -3.22,
        "change7d": -12.58,
        "change30d": -5.17,
        "timestamp24h": 1637035200,
        "timestamp7d": 1636516800,
        "timestamp30d": 1634529600
    }
},
{
    "1": {
        "tweetsRating": 44.04,
        "newsRating": 38.42
    },
    "2": {
        "tweetsRating": 14.76,
        "newsRating": -1.27
    }
},
]

表示只应切出 2 个对象。 我的功能如下,但它不起作用。

const sliceData = (array,start,end)=>{
    array.forEach(arr=>{
       Object.keys(arr).slice(start - 1, end + 1).reduce((result, key) => {
          result[key] = arr[key];

      return result;
    }
})
}

这里的start和end分别表示页面中起始对象的索引和页面中最后一个对象的索引。 谁能帮我处理代码?我将不胜感激。

您可以对新对象的条目进行切片。

const
    data = [{ "1": { id: 1, price: 569.2, marketcap: 94943213384.68, timestamp: 1637136047, datetime: "2021-11-17 08:00:47" }, "2": { id: 2, price: 59745.7, marketcap: 1127634159487.02, timestamp: 1637136064, datetime: "2021-11-17 08:01:04" }, "3": { id: 3, price: 592.53, marketcap: 11199494644.95126, timestamp: 1637136053, datetime: "2021-11-17 08:00:53" } }, { "1": { id: 1, last30dcommits: null, activity: "No Github Repo Found" }, "2": { id: 2, last30dcommits: 109, activity: "High Activity" }, "3": { id: 3, last30dcommits: 44, activity: "Medium Activity" } }, { "1": { id: 1, change24h: -6.75, change7d: -10.18, change30d: 17.32, timestamp24h: 1637035200, timestamp7d: 1636516800, timestamp30d: 1634529600 }, "2": { id: 2, change24h: -3.22, change7d: -12.58, change30d: -5.17, timestamp24h: 1637035200, timestamp7d: 1636516800, timestamp30d: 1634529600 }, "3": { id: 3, change24h: -6.37, change7d: -17.81, change30d: -5.04, timestamp24h: 1637035200, timestamp7d: 1636516800, timestamp30d: 1634529600 } }, { "1": { tweetsRating: 44.04, newsRating: 38.42 }, "2": { tweetsRating: 14.76, newsRating: -1.27 }, "3": { tweetsRating: 0, newsRating: 44.35 } }],
    result = data.map(o => Object.fromEntries(Object.entries(o).slice(0, 2)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

我真的认为后端发送的数据format/structure应该改变。您应该考虑从后端发送对象数组,而不是发送对象数组。这是因为本质上对象的 id 是关键。但是,如果您没有更改从后端发送的数据的权限,则可以通过以下方式对数据进行切片。

const sliceData = (array,start,end)=>{ 
    return array.map(el => {
        let newObj = Object.values(el).filter(x => x.id>start && x.id<=end).reduce((acc,x) => {
          acc[x.id] = x;
          return acc;  
        } ,{}) 
        return newObj;
    });
}