Lodash查找对象属性是否存在于数组中

ree*_*rix 12 javascript arrays lodash reactjs

我有一个这样的对象数组:

[ {"name": "apple", "id": "apple_0"}, 
  {"name": "dog",   "id": "dog_1"}, 
  {"name": "cat", "id": "cat_2"}
]
Run Code Online (Sandbox Code Playgroud)

我想插入另一个也被命名的元素,apple因为我不想在那里重复,我怎么能用lodash来查看数组中是否有一个具有相同名称的对象?

Nen*_*car 26

你可以_.find()像这样使用Lodash .

var data = [ {"name": "apple", "id": "apple_0"}, 
  {"name": "dog",   "id": "dog_1"}, 
  {"name": "cat", "id": "cat_2"}
]

if(!_.find(data, {name: 'apple'})) {
  data.push({name: 'apple2'});
}
console.log(data)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • _.find()文档的链接:[https://lodash.com/docs/#find](https://lodash.com/docs/#find) (2认同)

Ale*_*ero 8

这是表格

_.has(object, path)
Run Code Online (Sandbox Code Playgroud)

例:

const countries = { country: { name: 'Venezuela' } }
const isExist = _.has(countries, 'country.name')
// isExist = true
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Lodash文档

  • _.has告知该路径是否存在,并且不告知该值。 (3认同)

Ori*_*ori 5

您可以使用Array.prototype.find()或 lodash 的_.find()

const addItem = (arr, item) => {
  if(!arr.find((x) => x.name === item.name)) { // you can also change `name` to `id`
    arr.push(item);
  }
};

const arr = [ 
  {"name": "apple", "id": "apple_0"}, 
  {"name": "dog",   "id": "dog_1"}, 
  {"name": "cat", "id": "cat_2"}
];

addItem(arr, { "name": "apple", "id": "apple_0" });

addItem(arr, { "name": "pear", "id": "pear_3" });

console.log(arr);
Run Code Online (Sandbox Code Playgroud)

还有一个更短但可读性较差的版本:

    const addItem = (arr, item) => arr.find((x) => x.name === item.name) || arr.push(item); // you can also change `name` to `id`

    const arr = [ 
      {"name": "apple", "id": "apple_0"}, 
      {"name": "dog",   "id": "dog_1"}, 
      {"name": "cat", "id": "cat_2"}
    ];

    addItem(arr, { "name": "apple", "id": "apple_0" });

    addItem(arr, { "name": "pear", "id": "pear_3" });

    console.log(arr);
Run Code Online (Sandbox Code Playgroud)


Jor*_*jia 5

这是lodash的另一个例子

var a = [ {"name": "apple", "id": "apple_0"}, 
  {"name": "dog",   "id": "dog_1"}, 
  {"name": "cat", "id": "cat_2"}
]

var b = _.find(a, ['name', "apple2"]);

if(_.isObject(b)){
  console.log('exists')
}else{
    console.log('insert new')
}
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/jorge182/s4og07jg/


ree*_*rix 5

这对我有用(在测试了不同的解决方案之后):

  addItem(items, item) {
    let foundObject = _.find(items, function(e) {
      return e.value === item.value;
    });

    if(!foundObject) {
      items.push(item);
    }
    return items;
  }
Run Code Online (Sandbox Code Playgroud)