2017-08-13 22 views
0

我是lodash的新手,并且有以下查询。我附上我的样品json。我提到许多其他职位,但没有为我工作lo-dash:JSON解析并返回所需的输出

  • 我想找到状态为真阵列和下方的返回值

    1. 名存实亡
    2. 名和PARTNO
  • 我也想只是返回状态和名称

[{ 
 
\t \t 'state': true, 
 
\t \t 'partno': 21, 
 
\t \t 'idno': 1, 
 
\t \t 'name': 'abc' 
 
\t }, 
 
\t { 
 
\t \t 'state': true, 
 
\t \t 'partno': 22, 
 
\t \t 'idno': 2, 
 
\t \t 'name': 'xyz' 
 
\t }, 
 
\t { 
 
\t \t 'state': false, 
 
\t \t 'partno': 23, 
 
\t \t 'idno': 3, 
 
\t \t 'name': 'mnd' 
 
\t }, 
 
\t { 
 
\t \t 'state': true, 
 
\t \t 'partno': 26, 
 
\t \t 'idno': 4, 
 
\t \t 'name': 'koi' 
 
\t }, 
 
\t { 
 
\t \t 'state': false, 
 
\t \t 'partno': 21, 
 
\t \t 'idno': 1, 
 
\t \t 'name': 'abc' 
 
\t } 
 
]

回答

0

下面的代码做你需要什么

const data = getData(); 
 

 
console.log('I want to...\n\n'); 
 

 

 
console.log('1. find array with state as true and return name only') 
 
const result1 = _(data) 
 
    .filter('state') 
 
    .map('name') 
 
    .value(); 
 

 
// logAsJson is a helper function below 
 
logAsJson(result1); 
 
     
 
     
 
console.log('2. find array with state as true and return name and partno'); 
 
const result2 = _(data) 
 
    .filter('state') 
 
    // pickProperties is a helper function below 
 
    .map(pickProperties(['name', 'partno'])) 
 
    .value(); 
 
logAsJson(result2); 
 

 

 
console.log('3. just return state and name'); 
 
const result3 = _.map(data, pickProperties(['state', 'name'])); 
 
logAsJson(result3); 
 

 

 
// 
 
// Helper functions 
 
// 
 

 
function logAsJson(anObject) { 
 
    console.log(JSON.stringify(anObject, null, 2)); 
 
} 
 

 
function pickProperties(propsToPick) { 
 
    return function mapperFn(anObject) { 
 
    return _.pick(anObject, propsToPick); 
 
    }; 
 
} 
 

 
function getData() { 
 
    return [ 
 
    { 
 
     'state': true, 
 
     'partno': 21, 
 
     'idno': 1, 
 
     'name': 'abc' 
 
    }, 
 
    { 
 
     'state': true, 
 
     'partno': 22, 
 
     'idno': 2, 
 
     'name': 'xyz' 
 
    }, 
 
    { 
 
     'state': false, 
 
     'partno': 23, 
 
     'idno': 3, 
 
     'name': 'mnd' 
 
    }, 
 
    { 
 
     'state': true, 
 
     'partno': 26, 
 
     'idno': 4, 
 
     'name': 'koi' 
 
    }, 
 
    { 
 
     'state': false, 
 
     'partno': 21, 
 
     'idno': 1, 
 
     'name': 'abc' 
 
    } 
 
    ]; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

0

也许我没有得到你的问题,但这里是你的要求:

//Filters your array and creates a new object 
yourArray.filter(x => x.state) 
     .map(x => ({'name':x.name, 'partno':x.partno})) 

我不知道lodash,但在文档考虑看看,我来了这个:

_map(_.filter(yourArray, 'state'), (x) => ({'name':x.name,'partno':x.partno}) 

这几乎是相同的。你有什么理由为此使用lodash吗?