问题描述
我为用户提供了一系列对象(聊天),我想将所有包含未读消息的聊天推到列表顶部,而不影响其余聊天位置。
这是我到目前为止所拥有的。每次通过未读消息与hasUnread
进行新的聊天时,该聊天都会被推到列表的顶部。 其他所有聊天都将重新安排。
const singleChat = [...Object.values(singles)];
singleChat.sort((a,b) => (a.hasUnread == false ? 1 : -1));
我认为这是因为我需要指定要拉出的索引以及将其推回的索引。
我当时在想这样的事情:Move an array element from one array position to another,但能够破译旧职位似乎有些困惑。
if (new_index >= chat.length) {
var k = new_index - chat.length + 1;
while (k--) {
chat.push(undefined);
}
}
chat.splice(new_index,chat.splice(old_index,1)[0]);
任何帮助都会很棒。
解决方法
我不得不使用一个循环,虽然有点慢,但这行得通:
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class MouseCoordinatesTitle implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new MouseCoordinatesTitle());
}
private JFrame frame;
private String title;
public MouseCoordinatesTitle() {
this.title = "Coordinates: ";
}
@Override
public void run() {
frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createMainPanel());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createMainPanel() {
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(600,400));
panel.addMouseMotionListener(new PositionListener());
return panel;
}
public void updateJFrameTitle(Point point) {
StringBuilder builder = new StringBuilder(title);
builder.append("X: ");
builder.append(point.x);
builder.append(",Y: ");
builder.append(point.y);
frame.setTitle(builder.toString());
}
public class PositionListener implements MouseMotionListener {
@Override
public void mouseMoved(MouseEvent event) {
Point point = event.getPoint();
updateJFrameTitle(point);
}
@Override
public void mouseDragged(MouseEvent event) {
}
}
}