Проверьте все значения объекта, кроме одного - PullRequest
0 голосов
/ 04 октября 2019

У меня есть JavaScript. Объект выглядит примерно так:

{date: "2019-10-03", hello: 0, yo: 0, test: 0}

Могу ли я проверить, все ли значения в объекте ==0 кроме даты?

Я не являюсьуверен, как я могу это сделать.

Ответы [ 6 ]

3 голосов
/ 04 октября 2019

Используйте destructuring , чтобы извлечь дату и остальные свойства и вычислить sum из Object.values ​​, используя Array.reduce :

const obj = { date: "2019-10-03", hello: 0, yo: 0, test: 0 };

const { date, ...rest } = obj;

const sum = Object.values(rest).reduce((sum, curr) => sum + curr, 0);
const allZeros = sum === 0 ? true : false;

console.log(allZeros);

(имейте в виду, что это создаст переменную date в текущей области видимости)

или используйте Array.every

const obj = { date: "2019-10-03", hello: 0, yo: 0, test: 0 };

const { date, ...rest } = obj;

const allZeros = Object.values(rest).every(e => e === 0);

console.log(allZeros);
0 голосов
/ 05 октября 2019

Вот, я думаю, самый простой ответ, вы можете просто разделить ключи и значения объектов, а затем проверить «не дата» и «равно 0» в для цикла .

let main_obj = {date: "2019-10-03", hello: 0, yo: 0, test: 0};

let obj_keys = Object.keys(main_obj);

let obj_values = Object.values(main_obj);

for(i = 1; i <= obj_keys.length; i++) {
    if(obj_keys[i] != 'date' && obj_values[i] == 0) {
        console.log('Found Zero Number ' + i);
    }
}
0 голосов
/ 04 октября 2019

Вот еще одна альтернатива, которая использует Object.entries () в сочетании с Array.every () :

const allZeroExceptDate = o =>
    Object.entries(o).every(([k, v]) => k === "date" || v === 0);

console.log(allZeroExceptDate(
  {date: "2019-10-03", hello: 0, yo: 0, test: 0}
));

console.log(allZeroExceptDate(
  {hello: 0, yo: 0, test: 0}
));

console.log(allZeroExceptDate(
  {date: "some-date", hello: 0, yo: 0, test: 33}
));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
0 голосов
/ 04 октября 2019

Я думаю, вы ищете для ... в цикле с оператором if:

var obj = {date: "2019-10-03", hello: 0, yo: 0, test: 0};

for (var prop in obj) {
  if ((prop !== 'date') && (obj[prop] === 0)) {
    console.log("check for zero passed and NOT date");
  }
}
0 голосов
/ 04 октября 2019
let testObj = {date: "2019-10-03", hello: 0, yo: 0, test: 0};
let result = true;
for(const key of Object.keys(testObj)) {
  if(key !== 'date' && testObj[key] !== 0) result = false;
}
return result;

Мы можем перебрать ключи объекта, используя Object.keys(someObj), и проверить, равен ли ключ дате. Мы также можем выполнить проверку значений в том же цикле.

0 голосов
/ 04 октября 2019

Вы можете сделать цикл по свойствам:

let obj = {date: "2019-10-03", hello: 0, yo: 0, test: 0}
let isAllZero = true
for (const key in obj) {
    if (obj.hasOwnProperty(key) && key !== 'date' && obj[key] !== 0) {
        isAllZero = false
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...