簡體   English   中英

使用 lodash,如何在 object 上設置多個屬性?

[英]Using lodash, how do I set multiple properties on an object?

我有一個屬性列表,如下所示:

const list = [
  'creditCardNumber',
  'orderDetails.amount',
  'customerInformation.details.email',
]

給定這樣的 object:

const someObj = {
  creditCardNumber: '000 0000 0000 0000',
  orderNumber: '1234',
  orderDetails: { amount: 20, date: 'some date' },
  customerInformation: { details: { email: 'some@email.com', joinedOn: 'someDate' } },
  someOtherProp: 'some value',
}

使用lodash或 vanilla JS,是否有一種簡單的方法來制作 obj 的副本,同時重寫list數組上位置的值(例如: [HIDDEN]為相同的值)所以我們得到這樣的東西?

{  
  const someObj = {
  creditCardNumber: '[HIDDEN]',
  orderNumber: '1234',
  orderDetails: { amount:'[HIDDEN]', date: 'some date' },
  customerInformation: { details: { email: '[HIDDEN]', joinedOn: 'someDate' } },
  someOtherProp: 'some value',
}

Lodash _.set()接受點分隔的 object 路徑,所以

_.set(obj, 'orderDetails.amount', 'TEST');

將決定:

obj.orderDetails.amount = 'TEST'

將其與每個list項的循環相結合以獲得所需的結果:

 const list = [ 'creditCardNumber', 'orderDetails.amount', 'customerInformation.details.email' ]; const someObj = {creditCardNumber: '000 0000 0000 0000', orderNumber: '1234', orderDetails: { amount: 20, date: 'some date' }, customerInformation: { details: { email: 'some@email.com', joinedOn: 'someDate' } }, someOtherProp: 'some value', } const newObj = _.clone(someObj); list.forEach(key => _.set(newObj, key, '[HIDDEN]')); console.log(newObj);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

{
    "creditCardNumber": "[HIDDEN]",
    "orderNumber": "1234",
    "orderDetails":
    {
        "amount": "[HIDDEN]",
        "date": "some date"
    },
    "customerInformation":
    {
        "details":
        {
            "email": "[HIDDEN]",
            "joinedOn": "someDate"
        }
    },
    "someOtherProp": "some value"
}

注意:使用_.clone()來“克隆”object;)

使用香草 JS

克隆 object 使用Object 解構然后使用forEach添加[HIDDEN]

 const list = [ "creditCardNumber", "orderDetails.amount", "customerInformation.details.email", ]; const someObj = { creditCardNumber: "000 0000 0000 0000", orderNumber: "1234", orderDetails: { amount: 20, date: "some date" }, customerInformation: { details: { email: "some@email.com", joinedOn: "someDate" }, }, someOtherProp: "some value", }; let clone = {...someObj }; list.forEach((prop) => { const splitProp = prop.split("."); let obj = clone; splitProp.forEach((p, i, arr) => { if (i === arr.length - 1) { obj[p] = `[HIDDEN]`; } else { obj = obj[p]; } }); }); console.log(clone);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM