1function reconcile(oldRows, items, keyOf) {
2 return items.map((item, i) => {
3 const key = keyOf(item, i);
4 const old = oldRows.find((r) => r.key === key);
5 const row = old || { key, typed: "" };
6 row.label = item;
7 return row;
8 });
9}
10let rows = [];
11const render = (items, keyOf) => { rows = reconcile(rows, items, keyOf); };
12render(["Ravi", "Priya"], (item, i) => i);
13rows[0].typed = "98765";
14render(["Priya"], (item, i) => i);
15console.log("index key:", rows[0].label, "shows", JSON.stringify(rows[0].typed));
16rows = [];
17render(["Ravi", "Priya"], (item) => item);
18rows[0].typed = "98765";
19render(["Priya"], (item) => item);
20console.log("stable key:", rows[0].label, "shows", JSON.stringify(rows[0].typed));