我有一个排序数组,其中需要获取前四个元素,但这里不是获取前四个元素,而是需要保持第一个和第二个对象为静态对象,其余两个对象来自排序数组

const data = [
  { symbol: 'EHE', name: 'John' },
  { symbol: 'EHE-46', name: 'John' },
  { symbol: 'EHE-24', name: 'John' },
  { symbol: 'BHE-67', name: 'John' },
  { symbol: 'BHE', name: 'John' },
  { symbol: 'EHE-12', name: 'John' },
  { symbol: 'BHE-23', name: 'John' },
  { symbol: 'EHE-679', name: 'John' },
];



const eheIndex = data.findIndex(item => item.symbol === 'EHE');
const bheIndex = data.findIndex(item => item.symbol === 'BHE');

const output = [
  data[eheIndex],
  data[bheIndex],
  ...data.slice(eheIndex + 1, eheIndex + 3),
];

console.log(output);

因此,这将为我提供将第一个和第二个对象放在顶部的输出,并将排序后的其余对象放在其余位置.

但如果我将数据更改为不同的数据,它不起作用

const notWorkingData = [
  { symbol: 'EHE', name: 'John' },
  { symbol: 'BHE', name: 'John' },
  { symbol: 'EHE-12', name: 'John' },
  { symbol: 'BHE-23', name: 'John' },
  { symbol: 'EHE-679', name: 'John' },
  { symbol: 'EHE-46', name: 'John' },
  { symbol: 'EHE-24', name: 'John' },
  { symbol: 'BHE-67', name: 'John' },
];

输出

[
    {
        "symbol": "EHE",
        "name": "John"
    },
    {
        "symbol": "BHE",
        "name": "John"
    },
    {
        "symbol": "BHE",
        "name": "John"
    },
    {
        "symbol": "EHE-12",
        "name": "John"
    }
]

这给了我两次相同的对象,它应该获取第一个和第二个对象的位置,它应该从数组顺序获取一个休息时间

预期yields

[
    {
        "symbol": "EHE",
        "name": "John"
    },
    {
        "symbol": "BHE",
        "name": "John"
    },
    {
        "symbol": "BHE-12",
        "name": "John"
    },
    {
        "symbol": "EHE-23",
        "name": "John"
    }
] 

推荐答案

你可以收集所有指数并绘制数据图.

const
    data = [{ symbol: 'EHE', name: 'John' }, { symbol: 'EHE-46', name: 'John' }, { symbol: 'EHE-24', name: 'John' }, { symbol: 'BHE-67', name: 'John' }, { symbol: 'BHE', name: 'John' }, { symbol: 'EHE-12', name: 'John' }, { symbol: 'BHE-23', name: 'John' }, { symbol: 'EHE-679', name: 'John' }],
    indices = ['EHE', 'BHE'].map(symbol => data.findIndex(item => item.symbol === symbol));

let i = 0;

while (indices.length < 4 && i < data.length) {
    if (!indices.includes(i)) indices.push(i);
    i++;
}

const
    output = indices.map(i => data[i]);

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

Javascript相关问答推荐

序列化我的数据并发送httpPost请求后,控制器收到空参数

验证嵌套 colored颜色 代码的结果

HTML/JavaScript函数未执行

nPM审计始终发现0个漏洞

用相器进行向内碰撞检测

在React中获取数据后,如何避免不必要的组件闪现1秒?

node TS:JWT令牌签名以验证客户端和后台问题之间的身份验证

使用下表中所示的值初始化一个二维数组

在这种情况下,如何 for each 元素添加id?

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

WhatsApp Cloud API上载问题:由于MIME类型不正确而导致接收&Quot;INVALID_REQUEST";错误

有条件重定向到移动子域

MarkLogic-earch.suggest不返回任何值

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等

如何在HTMX提示符中设置默认值?

处理app.param()中的多个参数

Node.js API-queryAll()中的MarkLogic数据移动

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?