从 React/js 中的数组中查找唯一值
Find unique values from an array in React/js
我是 JavaScript 的初学者,也是 ReactJS 的初学者。以下大部分内容都是我从教程中获取的,并正在尝试对其进行改编。因此代码显示 "tag" 中的所有值(人、地点、地点等)。它将它显示为内联 li 元素,因为它将成为一个菜单。问题是它显示了所有元素的所有标签。我只是想让它捕捉菜单的唯一 'tag' 值(例如人、地点、事物...)。我试过 _.uniq 但它没有显示数组。谢谢。
import React from "react";
import GalleryHeader from './GalleryHeader';
import ImageEntry from './ImageEntry';
import _ from 'lodash';
export default class GalleryImages extends React.Component {
renderItems() {
return _.map(this.props.images, (image, index) => <ImageEntry key={index} {...image} />);
}
renderMenu() {
return _.map(this.props.images, (image, index) => <GalleryHeader key={index} {...image} />);
}
render() {
return (
<div>
<ul class="list-inline">
{this.renderMenu()}
</ul>
{this.renderItems()}
</div>
);
}
}
图库页眉
import React from "react";
export default class GalleryHeader extends React.Component {
render() {
return (
<li>{this.props.tag}</li>
);
}
}
图像存储在:
图库
import React from "react";
import GalleryImages from './Gallery/GalleryImages';
var images = [{
"id": 1,
"tag": "people",
"src": "img/img1.jpg",
"bsrc": "img/img1b.jpg",
"alt": "Some description"
}, {
"id": 2,
"tag": "places",
"src": "img/img2.jpg",
"bsrc": "img/img2b.jpg",
"alt": "Some description"
}, {
"id": 3,
"tag": "places",
"src": "img/img3.jpg",
"bsrc": "img/img3b.jpg",
"alt": "Some place description"
}, {
"id": 4,
"tag": "things",
"src": "img/img4.jpg",
"bsrc": "img/img4b.jpg",
"alt": "Internet of things"
}, {
"id": 5,
"tag": "people",
"src": "img/img5.jpg",
"bsrc": "img/img5b.jpg",
"alt": "A personal person"
}, {
"id": 6,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}, {
"id": 7,
"tag": "people",
"src": "img/img7.jpg",
"bsrc": "img/img7b.jpg",
"alt": "Tarabaora"
}, {
"id": 8,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}, {
"id": 9,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}];
export default class Gallery extends React.Component {
constructor(props) {
super(props);
this.state = {
images,
people: _.filter(images, {tag: "things"}), // or in ES6 just people
sources: _.filter(images, {tag: "src"}),
places: _.filter(images, {tag: "places"}),
cats: _.uniq(images)
};
}
render() {
// This is how you can filter them
var ima = _.filter(images, {tag: "things"});
console.log(ima);
return (
<div className="koko">
<h1>This isGalleryfemCount</h1>
<GalleryImages images={this.state.images} />
</div>
);
}
}
因为它们是纯字符串,您可以为此创建一个 JavaScript Set
。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
据我了解,您想通过给定标签过滤掉原始图片集。正确吗?
如果是这样,创建过滤器函数,它接受要过滤的标签和集合。然后您可以重用此功能。
var images = [{
"id": 1,
"tag": "people",
"src": "img/img1.jpg",
"bsrc": "img/img1b.jpg",
"alt": "Some description"
}, {
"id": 2,
"tag": "places",
"src": "img/img2.jpg",
"bsrc": "img/img2b.jpg",
"alt": "Some description"
}, {
"id": 3,
"tag": "places",
"src": "img/img3.jpg",
"bsrc": "img/img3b.jpg",
"alt": "Some place description"
}, {
"id": 4,
"tag": "things",
"src": "img/img4.jpg",
"bsrc": "img/img4b.jpg",
"alt": "Internet of things"
}, {
"id": 5,
"tag": "people",
"src": "img/img5.jpg",
"bsrc": "img/img5b.jpg",
"alt": "A personal person"
}, {
"id": 6,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}, {
"id": 7,
"tag": "people",
"src": "img/img7.jpg",
"bsrc": "img/img7b.jpg",
"alt": "Tarabaora"
}, {
"id": 8,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}, {
"id": 9,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}];
const filter = (tag, arr) => arr.filter(img => img.tag === tag);
// or in ES5
// var filter = function(tag, arr) {
// return arr.filter(function(img) {
// return img.tag === tag;
// })
// };
const filtered = filter('people', images);
编辑
添加了代码以选择所有唯一的标签名称。无依赖性。 Unline Set,这适用于 IE < 11.
const uniqueTags = [];
images.map(img => {
if (uniqueTags.indexOf(img.tag) === -1) {
uniqueTags.push(img.tag)
}
});
类似于SQLSELECTjavascript
中的DISTINCT语句
const uniqueTags = [];
images.map((item) => {
var findItem = uniqueTags.find((x) => x.tag === item.tag);
if (!findItem) uniqueTags.push(item);
});
如本文档所述[1],我们可以使用 uniqBy 方法来 return 对象数组中的唯一元素。请参考以下代码。
import _ from 'lodash';
_.uniqBy([{ 'id': 100 }, { 'id': 200 }, { 'id': 300 },{ 'id': 100 }], 'id');
这将 return 这样的输出 [{ 'id': 100 }, { 'id': 200 }, { 'id': 300 }]
打字稿集 source
对于那些使用 Typescripts 的人,我会推荐 TypeScript Set
Array.from(new Set(yourArray.map((item: any) => item.id)))
我是 JavaScript 的初学者,也是 ReactJS 的初学者。以下大部分内容都是我从教程中获取的,并正在尝试对其进行改编。因此代码显示 "tag" 中的所有值(人、地点、地点等)。它将它显示为内联 li 元素,因为它将成为一个菜单。问题是它显示了所有元素的所有标签。我只是想让它捕捉菜单的唯一 'tag' 值(例如人、地点、事物...)。我试过 _.uniq 但它没有显示数组。谢谢。
import React from "react";
import GalleryHeader from './GalleryHeader';
import ImageEntry from './ImageEntry';
import _ from 'lodash';
export default class GalleryImages extends React.Component {
renderItems() {
return _.map(this.props.images, (image, index) => <ImageEntry key={index} {...image} />);
}
renderMenu() {
return _.map(this.props.images, (image, index) => <GalleryHeader key={index} {...image} />);
}
render() {
return (
<div>
<ul class="list-inline">
{this.renderMenu()}
</ul>
{this.renderItems()}
</div>
);
}
}
图库页眉
import React from "react";
export default class GalleryHeader extends React.Component {
render() {
return (
<li>{this.props.tag}</li>
);
}
}
图像存储在:
图库
import React from "react";
import GalleryImages from './Gallery/GalleryImages';
var images = [{
"id": 1,
"tag": "people",
"src": "img/img1.jpg",
"bsrc": "img/img1b.jpg",
"alt": "Some description"
}, {
"id": 2,
"tag": "places",
"src": "img/img2.jpg",
"bsrc": "img/img2b.jpg",
"alt": "Some description"
}, {
"id": 3,
"tag": "places",
"src": "img/img3.jpg",
"bsrc": "img/img3b.jpg",
"alt": "Some place description"
}, {
"id": 4,
"tag": "things",
"src": "img/img4.jpg",
"bsrc": "img/img4b.jpg",
"alt": "Internet of things"
}, {
"id": 5,
"tag": "people",
"src": "img/img5.jpg",
"bsrc": "img/img5b.jpg",
"alt": "A personal person"
}, {
"id": 6,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}, {
"id": 7,
"tag": "people",
"src": "img/img7.jpg",
"bsrc": "img/img7b.jpg",
"alt": "Tarabaora"
}, {
"id": 8,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}, {
"id": 9,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}];
export default class Gallery extends React.Component {
constructor(props) {
super(props);
this.state = {
images,
people: _.filter(images, {tag: "things"}), // or in ES6 just people
sources: _.filter(images, {tag: "src"}),
places: _.filter(images, {tag: "places"}),
cats: _.uniq(images)
};
}
render() {
// This is how you can filter them
var ima = _.filter(images, {tag: "things"});
console.log(ima);
return (
<div className="koko">
<h1>This isGalleryfemCount</h1>
<GalleryImages images={this.state.images} />
</div>
);
}
}
因为它们是纯字符串,您可以为此创建一个 JavaScript Set
。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
据我了解,您想通过给定标签过滤掉原始图片集。正确吗?
如果是这样,创建过滤器函数,它接受要过滤的标签和集合。然后您可以重用此功能。
var images = [{
"id": 1,
"tag": "people",
"src": "img/img1.jpg",
"bsrc": "img/img1b.jpg",
"alt": "Some description"
}, {
"id": 2,
"tag": "places",
"src": "img/img2.jpg",
"bsrc": "img/img2b.jpg",
"alt": "Some description"
}, {
"id": 3,
"tag": "places",
"src": "img/img3.jpg",
"bsrc": "img/img3b.jpg",
"alt": "Some place description"
}, {
"id": 4,
"tag": "things",
"src": "img/img4.jpg",
"bsrc": "img/img4b.jpg",
"alt": "Internet of things"
}, {
"id": 5,
"tag": "people",
"src": "img/img5.jpg",
"bsrc": "img/img5b.jpg",
"alt": "A personal person"
}, {
"id": 6,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}, {
"id": 7,
"tag": "people",
"src": "img/img7.jpg",
"bsrc": "img/img7b.jpg",
"alt": "Tarabaora"
}, {
"id": 8,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}, {
"id": 9,
"tag": "places",
"src": "img/img6.jpg",
"bsrc": "img/img6b.jpg",
"alt": "Interesting place"
}];
const filter = (tag, arr) => arr.filter(img => img.tag === tag);
// or in ES5
// var filter = function(tag, arr) {
// return arr.filter(function(img) {
// return img.tag === tag;
// })
// };
const filtered = filter('people', images);
编辑
添加了代码以选择所有唯一的标签名称。无依赖性。 Unline Set,这适用于 IE < 11.
const uniqueTags = [];
images.map(img => {
if (uniqueTags.indexOf(img.tag) === -1) {
uniqueTags.push(img.tag)
}
});
类似于SQLSELECTjavascript
中的DISTINCT语句const uniqueTags = [];
images.map((item) => {
var findItem = uniqueTags.find((x) => x.tag === item.tag);
if (!findItem) uniqueTags.push(item);
});
如本文档所述[1],我们可以使用 uniqBy 方法来 return 对象数组中的唯一元素。请参考以下代码。
import _ from 'lodash';
_.uniqBy([{ 'id': 100 }, { 'id': 200 }, { 'id': 300 },{ 'id': 100 }], 'id');
这将 return 这样的输出 [{ 'id': 100 }, { 'id': 200 }, { 'id': 300 }]
打字稿集 source
对于那些使用 Typescripts 的人,我会推荐 TypeScript Set
Array.from(new Set(yourArray.map((item: any) => item.id)))