, мне нравятся примеры, которые используют Object.fromEntries
такой в качестве [1 110] этот , но тем не менее это не очень просто в использовании. Ответы, которые используют Object.keys
и затем ищут key
на самом деле, делают несколько поисков, которые не могут быть необходимыми.
я соглашаюсь с [1 111] @alexander-mills , что должны быть помехи Object.map
функция. Я расширил его реализацию в TypeScript и получил это:
Использование:
const myObject = { 'a': 1, 'b': 2, 'c': 3 };
// keep the key and modify the value
let obj = Object.map(myObject, val => val * 2);
// obj = { a: 2, b: 4, c: 6 }
// modify both key and value
obj = Object.map(myObject,
val => val * 2 + '',
key => (key + key).toUpperCase());
// obj = { AA: '2', BB: '4', CC: '6' }
Код:
interface Dictionary {
[key: string]: T;
}
interface ObjectConstructor {
map(
obj: Dictionary,
valSelector: (val: TValue, obj: Dictionary) => TResult,
keySelector?: (key: string, obj: Dictionary) => string,
ctx?: Dictionary
): Dictionary;
}
function objectMap(
obj: Dictionary,
valSelector: (val: TValue, obj: Dictionary) => TResult,
keySelector?: (key: string, obj: Dictionary) => string,
ctx?: Dictionary
) {
const ret = {} as Dictionary;
for (const key of Object.keys(obj)) {
const retKey = keySelector
? keySelector.call(ctx || null, key, obj)
: key;
const retVal = valSelector.call(ctx || null, obj[key], obj);
ret[retKey] = retVal;
}
return ret;
}
Object.map = objectMap;
, Если Вы не хотите TypeScript (почему?) тогда копируют вышеупомянутый код в [1 112] Детская площадка TypeScript для получения кода JavaScript.
причина я поместил 116-секундный, то, потому что это является дополнительным.
кроме того, так как это не изменяет Object
прототип, я думаю, что безопасно, но если Вы не хотите затрагивать эти Object
интерфейс, можно просто удалить последнюю строку и использование objectMap
вместо этого.
Не полный ответ, но ...
Если вы используете Linux, интерфейс inotify
позволит вам поймать a первые несколько полезных шагов операции:
unlink
'оставшееся бывшее гнездо вызовет на нем IN_DELETE_SELF
. bind
вызовет ] IN_CREATE
в родительском каталоге. К сожалению, сервер не может подключиться
'до тех пор, пока он не прослушает
. Хотя это следующий логический шаг, нет никакой гарантии, что он сделает это сразу. Не похоже, что inotify
предоставляет интерфейс для этого.