最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Check all value of Object except one - Stack Overflow

programmeradmin3浏览0评论

I have a JavaScript.The object looks something like

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

Can I check to see if all values in object are ==0 except for the date?

I am not sure how I can go about coding that.

I have a JavaScript.The object looks something like

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

Can I check to see if all values in object are ==0 except for the date?

I am not sure how I can go about coding that.

Share Improve this question edited Oct 4, 2019 at 20:27 Taki 17.7k5 gold badges28 silver badges48 bronze badges asked Oct 4, 2019 at 20:20 nb_nb_nbnb_nb_nb 1,38117 silver badges53 bronze badges
Add a ment  | 

6 Answers 6

Reset to default 12

Use destructuring to extract the date and the rest of the properties and calculate the sum of the Object.values using 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);

( keep in mind that this will create a variable date in the current scope )

or, use 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);

Here is another alternative that uses Object.entries() in bination with 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;}

You can do a loop over properties:

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
    }
}
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;

We can loop through the keys of an object using Object.keys(someObj) and check if the key is equal to date. We can also perform the value checks in the same loop.

I think you're looking for a for...in loop with an if statement:

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");
  }
}

Here is I think simplest answer, you can simply separate Object Keys & Values and than check "not date" and "equals to 0" in for loop.

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)

  1. 暂无评论