2016-11-08 6 views

ответ

0

Как о:

let myObject = { "Name": "value1", "Phoneno": "545454545445" }; 
let output = {}; 

function mask(value: string) { 
    let maskedValue = ""; 
    for (let i = 0; i < value.length; i++) { 
     maskedValue += "*"; 
    } 

    return maskedValue; 
} 

Object.keys(myObject).forEach(key => { 
    output[key] = mask(myObject[key]); 
}); 

console.log(output); // Object {Name: "******", Phoneno: "************"} 

(code in playground)

+0

Спасибо, это работает. но что, если JSON как ниже – tiya

+0

Как ниже? Ниже, что? Я не понимаю –

0

следующая стратегия использует for...in цикл для обхода объекта, заменяя все значения свойств с цепочкой звездочек.

const myObject = {"Name": "value1", "Phoneno": "545454545445"}; 
 

 
const mask = obj => { 
 
    const masked = {}; 
 
    for (let key in obj) masked[key] = "*****"; 
 
    return masked; 
 
}; 
 

 
console.log("original:", myObject); 
 
console.log("masked:", mask(myObject));

Если вы хотите значение замаскированного быть звездочками, но такие же длины, как и оригинал (вместо постоянной длиной), изменить цикл for...in на следующее: for (let key in obj) masked[key] = "*".repeat(obj[key].length);.

UPDATE: маскировка вложенных объекты (и даже массивы)

В комментариях, вы спрашивали о маскирующих значениях вложенных объектов.

Для обработки вложенного объекта или даже комбинаций объектов и/или массивов в любом вложенном расположении вам, вероятно, потребуется рекурсия. Короче говоря, если текущее значение является примитивным значением (например, строка, число, логическое и т. Д.), То замените его на фиктивную строку, но если текущее значение является самим объектом (или массивом), то re -отправить это значение обратно в процесс маскировки с самого начала.

В следующем примере показан один способ, которым это может быть сделано. Я использовал jQuery для определения того, является ли значение простым объектом или массивом. В этом примере имена свойств объекта заканчиваются на «A», «B», «C» и т. Д. Массивы преобразуются в объекты, например. ["foo", "bar"] будет преобразован в {"0": "*****", "1": "*****"}.

const myObject = {propA: "a", propB: {propBA: "ba", propBB: "bb"}, propC: ["c0", "c1"], propD: {propDA: "da", propDB: {propDBA: "dba", propDBB: "dbb"}, propDC: ["dc0", "dc1"]}, propE: ["e0", {propE1A: "e1a", propE1B: "e1b"}, ["e20", "e21"]]}; 
 

 
const mask = objOrArr => { 
 
    const masked = {}; 
 
    for (let key in objOrArr) { 
 
    const val = objOrArr[key]; 
 
    if ($.isPlainObject(val) || $.isArray(val)) { 
 
     masked[key] = mask(val); 
 
    } else { 
 
     masked[key] = "*****"; 
 
    } 
 
    } 
 
    return masked; 
 
}; 
 

 
console.log("original... ", myObject); 
 
console.log("masked... ", mask(myObject));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Я не уверен, что это хорошая идея использовать заполнитель, который имеет точно длину значения объекта. По-моему, использование статического заполнителя было бы лучше. Поскольку он замаскирован, не имеет значения, сколько времени значение в любом случае. – Vernon

+1

@ Вернон, достаточно справедливо. Измените код на 'for (let key in obj) masked [key] =" ***** ";'. Делает это еще проще. ... Включил ваше предложение в свой ответ. –

+0

Спасибо всем, но что, если obect, как показано ниже: пусть MyObject = { Заголовок: { ID: "1234", Имя: "XYZ", Имя пользователя: "ABC", домена: "R", Источник : "abc", MessageVersion: "1.0" , SendDateTime: Дата }, клиента: { Событие: "1234" } }; – tiya

1

Может быть, вы найдете полезную библиотеку https://github.com/tcdl/json-masker, которая позволяет это сделать:

const mask = require('json-masker'); 
const myObject = {"Name": "value1", "Phoneno": "545454545445"}; 
const masked = mask(myObject); // will produce: 
           // {"Name": "xxxxx*", "Phoneno": "************"} 
Смежные вопросы