Добавить свойство к объекту, только если оно не определено - PullRequest
0 голосов
/ 17 октября 2018

У меня есть следующий объект:

   let params = {
            limit: limit,
            offset: 15,
            status: "completed",
            product_id: this.route.snapshot.queryParams.product_id,
        };

Вышеуказанный объект содержит параметры, которые фильтруют мой источник данных.

this.route.snapshot.queryParams.product_id - это параметр запроса / получения

? Product_id = 123

Однако, если это значение отсутствует, оно не определено.Поэтому я не хочу добавлять product_id член к объекту параметров, если это значение не определено.

Если оно не определено, объект должен выглядеть следующим образом:

   let params = {
            limit: limit,
            offset: 15,
            status: "completed",
        };

Ответы [ 12 ]

0 голосов
/ 17 октября 2018

Вы также можете попробовать:

let param = { product_id:this.route.snapshot.queryParams.product_id }
params = this.route.snapshot.queryParams.product_id ? {...params, ...param} : params ;
0 голосов
/ 17 октября 2018

Встроенное решение:

let params = {
  limit: limit,
  offset: 15,
  status: "completed",
  ...this.route.snapshot.queryParams.product_id && {product_id: this.route.snapshot.queryParams.product_id},
};

Или короче:

const product_id = this.route.snapshot.queryParams.product_id
let params = {
  limit: limit,
  offset: 15,
  status: "completed",
  ...product_id && {product_id},
};
0 голосов
/ 17 октября 2018

Как насчет создания объекта params с 3 членами и последующим добавлением в зависимости от условия.

let params = {
  limit: limit,
  offset: 15,
  status: "completed",
};
var value = this.route.snapshot.queryParams.product_id;
if (value) {
  params.product_id = value
}
0 голосов
/ 17 октября 2018

Есть несколько способов добиться этого.Я укажу два из них.Вы можете просто использовать оператор if для добавления product_id поля

let product_id = this.route.snapshot.queryParams.product_id;
if(product_id) {
    params.product_id = product_id;
}

или

, вы можете использовать оператор разделения

let product_id = this.route.snapshot.queryParams.product_id;
let params = {
    limit: limit,
    offset: 15,
    status: "completed",
    ...product_id ? {product_id} : {},
};
0 голосов
/ 17 октября 2018

Это должно сделать работу:

let params = {
        limit: limit,
        offset: 15,
        status: "completed",
    };

if (this.route.snapshot.queryParams.product_id) {
   params["product_id"] = this.route.snapshot.queryParams.product_id
}
0 голосов
/ 17 октября 2018

Попробуйте это

  const product_id = this.route.snapshot.queryParams.product_id;

  let params = Object.assign({
            limit: limit,
            offset: 15,
            status: "completed"
        }, product_id ? {product_id} : {});
0 голосов
/ 17 октября 2018

Что вы думаете о следующем

const constantParams= {
   limit: limit,
   offset: 15,
   status: "completed",
}
let yourDynamicObject = this.route.snapshot.queryParams.product_id 
? {...constantParams, product_id: this.route.snapshot.queryParams.product_id}
: this.paramsWichAreAlwaysThere
0 голосов
/ 17 октября 2018

Добавить product_id, только если он не определен

let params = {
        limit: limit,
        offset: 15,
        status: "completed",
    };

if(this.route.snapshot.queryParams.product_id)
   params['product_id'] = this.route.snapshot.queryParams.product_id;
0 голосов
/ 17 октября 2018

Лично я думаю, что вы должны позволить product_id быть неопределенным и сделать проверку, если это там позже, но вы можете сделать следующее:

let params = {
  limit: limit,
  offset: 15,
  status: "completed",
};

if(this.route.snapshot.queryParams.product_id) {
  params['product_id'] = this.route.snapshot.queryParams.product_id;
}
0 голосов
/ 17 октября 2018

Когда я делал это в прошлом, я делал что-то похожее на пример ниже.Я чувствую, что, возможно, есть лучший способ сделать это, но я еще не нашел его.

const removeUndefinedValues = objectIn => Object.keys(objectIn)
  .reduce((prev, curr) => {
    return objectIn[curr] !== undefined ?
      {
        ...prev,
        [curr]: objectIn[curr]
      } : prev
  }, {})

let paramsOne = {
    limit: 0,
    offset: 15,
    status: "completed",
    product_id: undefined,
}

let paramsTwo = {
    limit: 0,
    offset: 15,
    status: "completed",
    product_id: "A value",
}

console.dir(removeUndefinedValues(paramsOne))
console.dir(removeUndefinedValues(paramsTwo))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...