查找数组中的对象中某个值最后一次出现位置并替换其值
arr = [{id: 1, common: 'first'},
{id: 2, common: 'middle'},
{id: 3, common: 'middle'}
]
把最后一个common的middle替换为last,用js要怎么弄
回答:
简单理解了一下楼主的需求,供参考
const replaceLastRepeat = ( arr: any[],
replaces: Array<[string, string]>
) => {
const obj: Record<string, any> = {};
for (const item of arr) {
obj[item.common] = {
item,
n: obj[item.common]?.n ? obj[item.common].n + 1 : 1
};
}
for (const [k, v] of replaces) {
obj[k].n > 1 && (obj[k].item.common = v);
}
};
const arr = [
{ id: 1, common: 'first' },
{ id: 1, common: 'first' },
{ id: 2, common: 'middle' },
{ id: 3, common: 'middle' },
{ id: 4, common: 'middle' }
];
replaceLastRepeat(arr, [
['middle', 'last'],
['first', 'first2']
]);
console.log('after-arr :>> ', arr);
回答:
用 Lodash 的 findLast
或者 findLastIndex
都可以
import _ from "lodash";const arr = [
{ id: 1, common: "first" },
{ id: 2, common: "middle" },
{ id: 3, common: "middle" }
];
const found = _.findLast(arr, it => it.common === "middle");
if (found) {
found.common = "last";
}
console.log(arr);
如果不想用 Lodash,自己写一个也容易,逆向循环查找就行
Array.prototype.findLast = function (predicate) { for (let i = this.length - 1; i >= 0; i--) {
if (predicate(this[i])) {
return this[i];
}
}
};
const found = arr.findLast(it => it.common === "middle");
if (found) { found.common = "last"; }
console.log(arr);
如果想判断是否是重复的项,可以进行正向查找和反向查找,看得到的 index
是否相同。
回答:
function set(arr, key, value) { for (var i = arr.length; i--;) {
if (arr[i].hasOwnProperty(key)) {
arr[i][key] = value;
return i;
}
}
return -1;
}
console.dir(set(arr, "common", "last"));
以上是 查找数组中的对象中某个值最后一次出现位置并替换其值 的全部内容, 来源链接: utcz.com/p/936545.html