如何使用' map'数组中的数组(Json)

时间:2017-12-26 20:01:38

标签: javascript arrays json

我有JSON数据:

users = [{
  "name": "alex", 
   "id":123, 
   "surname":"xx", 
    tarriff: {
      "id":1,
      "name":"free"
    }
},
 {
  "name": "tom", 
   "id":124, 
   "surname":"henry", 
    tarriff: {
      "id":1,
      "name":"free"
    }
}

我需要过滤数据(删除"姓氏":" xx","姓氏":" henry"和smt else)

如果我使用tarriff.name表示语法错误

$scope.userfilter = users.map(({name,id, tarriff.name}) => ({name, id, tariff_name}));

请帮我写一个正确的解决方案。

3 个答案:

答案 0 :(得分:1)

您可以使用destructuring assignment并使用short hand properties构建新对象。

var users = [{ name: "alex", id: 123, surname: "xx", tarriff: { id: 1, name: "free" } }, { name: "tom", id: 124, surname: "henry", tarriff: { id: 1, name: "free" } }],
    result = users.map(({ name, id, tarriff }) => ({ name, id, tarriff_name: tarriff.name }));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

您的users变量是一个对象,而不是数组。我认为这只是一个错误,你想知道如何过滤数组。您应该使用filter这样的方法:

const users = [
  {"name": "alex", "id":123, "surname":"xx", tarriff:{"id":1,"name":"free"}},
  {"name": "emma", "id":123, "surname":"yy", tarriff:{"id":2,"name":"anna"}}
];

const criterium = "free";
const matchingUsers = users.filter(user => user.tarriff.name == criterium);

console.log (matchingUsers)

答案 2 :(得分:0)

很难理解你真正想要的是什么。但我猜你不是在谈论Array.filter,而是深深地映射。

语法错误是因为你正在解构错误。这是一个更好的方法:

$scope.userfilter = users.map( ({name, id, tarriff: { name: tarriff_name }}) => {
    return {name, id, tariff_name};
});