2

我有这个数组

{ 1: NaN
2: NaN
120: NaN
121: NaN
122: NaN
125: NaN
126: NaN
127: NaN
128: NaN
129: NaN
130: NaN
131: NaN
132: NaN
133: NaN
134: NaN
135: NaN
136: NaN
602: NaN
603: true
604: true
605: NaN
607: NaN
608: NaN
609: NaN
610: NaN
612: NaN
613: NaN
614: NaN
615: NaN
616: NaN
617: NaN
765: NaN}

问题很简单:当值为true时,如何提取标签(1,2,120,122,125..) ?

4

4 回答 4

3

您可以过滤值为 true 的键

var obj = { 1: NaN,2: NaN,120: NaN,121: NaN,122: NaN,125: NaN,126: NaN,127: NaN,128: NaN,129: NaN,130: NaN,131: NaN,132: NaN,133: NaN,134: NaN,135: NaN,136: NaN,602: NaN,603: true,604: true,605: NaN,607: NaN,608: NaN,609: NaN,610: NaN,612: NaN,613: NaN,614: NaN,615: NaN,616: NaN,617: NaN,765: NaN};

var values = Object.keys(obj).filter(key => obj[key])
console.log(values)

于 2021-04-28T09:53:42.017 回答
2

您需要将对象转换为数组,然后过滤值并获取相应的键:

var obj = { 1: NaN,2: NaN,120: NaN,121: NaN,122: NaN,125: NaN,126: NaN,127: NaN,128: NaN,129: NaN,130: NaN,131: NaN,132: NaN,133: NaN,134: NaN,135: NaN,136: NaN,602: NaN,603: true,604: true,605: NaN,607: NaN,608: NaN,609: NaN,610: NaN,612: NaN,613: NaN,614: NaN,615: NaN,616: NaN,617: NaN,765: NaN};

var values = Object.entries(obj)   // Convert the object to a key/value array
    .filter(([_, value]) => value) // We only want the entries that have a truthy value.
    .map(([key]) => key);          // And of those entries, we only want the keys.

console.log(values);

于 2021-04-28T09:50:03.577 回答
0

你可以这样写:

function getTruthyLabels(data){
  const truthyLabels = []
   Object.entries(data).forEach(([key, value])=> value && truthyLabels.push(key))
  return truthyLabels
}

工作示例:

const myObject = { 1: NaN,2: NaN,120: NaN,121: NaN,122: NaN,125: NaN,126: NaN,127: NaN,128: NaN,129: NaN,130: NaN,131: NaN,132: NaN,133: NaN,134: NaN,135: NaN,136: NaN,602: NaN,603: true,604: true,605: NaN,607: NaN,608: NaN,609: NaN,610: NaN,612: NaN,613: NaN,614: NaN,615: NaN,616: NaN,617: NaN,765: NaN}

function getTruthyLabels(data){
  const truthyLabels = []
   Object.entries(data).forEach(([key, value])=> value && truthyLabels.push(key))
  return truthyLabels
}

console.log(getTruthyLabels(myObject))

于 2021-04-28T09:54:37.943 回答
0

这将通过for-in循环 非常容易地完成

var obj = { 1: NaN,2: NaN,120: NaN,121: NaN,122: NaN,125: NaN,126: NaN,127: NaN,128: NaN,129: NaN,130: NaN,131: NaN,132: NaN,133: NaN,134: NaN,135: NaN,136: NaN,602: NaN,603: true,604: true,605: NaN,607: NaN,608: NaN,609: NaN,610: NaN,612: NaN,613: NaN,614: NaN,615: NaN,616: NaN,617: NaN,765: NaN};

const arr=[]
for(key in obj){
  if(obj[key]){
   arr.push(key)
  }
  
}
console.log(arr);

于 2021-04-28T09:57:04.697 回答