昨天我加入react-router-dom了我的项目,现在当我离开并回到Sky导航中的元素时,它重新加载了天空,我得到了
警告:flattenChildren(...):遇到两个孩子用同一把钥匙,
element-id-50.子键必须是唯一的; 当两个孩子共用一把钥匙时,只会使用第一个孩子.
(上面使用的数字50只是一个例子,每次使用不同的id时,它会抛出此错误~40次)
问题似乎源于我的sky.js文件:
componentWillMount() {
this.props.dispatch(requestSkySetup());
this.props.dispatch(requestAllElements());
this.setState({loadedSky: true, loadedElements: true});
}
Run Code Online (Sandbox Code Playgroud)
因为每次我要去另一个屏幕时,这个组件都会卸载,然后在我回来时重新安装.
当receiveSkySetup完成后,render在功能上sky.js产生了一堆的div称为SectorS和各Sector创建一些div的名为Slot秒.
然后在里面Slot.render我有:
return connectDropTarget(
<div className={showOutline ? 'slot showOutline' : 'slot'} style={style} onClick={interactable ? this.handleClick : null}>
{
elements
.map(e => (
<SkyElement
id={e.id}
key={`element-id-${e.id}`}
title={e.title}
size={150}
opacity={e.opacity}
glow={e.glow}
color={e.color}
sectorId={e.sectorId}
slotId={e.id}
dispatch={this.props.dispatch}
isDragging={false}
transformElement={false} />
))
}
</div>
);
Run Code Online (Sandbox Code Playgroud)
上面调用中的key元素 …
在我的CouchDB reduce函数中,我需要将项目列表减少到唯一的项目.
注意:在这种情况下,可以有一个列表,它将是少量的字符串类型的项目.
我目前的方法是设置一个对象的键,然后返回该对象的键,因为代码不能使用这样的地方_.uniq.
我想找一个更优雅的拼写方法.
function(keys, values, rereduce) {
// values is a Array of Arrays
values = Array.concat.apply(null, values);
var uniq = {};
values.forEach(function(item) { uniq[item] = true; });
return Object.keys(uniq);
}
Run Code Online (Sandbox Code Playgroud) 众所周知,没有内置函数可以在javascript中从数组中删除重复项.我注意到这也缺少jQuery(它只有DOM选择的独特功能),我发现的最常见的片段检查整个数组及其中每个元素的一个子集(我认为效率不高),如:
for (var i = 0; i < arr.length; i++)
for (var j = i + 1; j < arr.length; j++)
if (arr[i] === arr[j])
//whatever
Run Code Online (Sandbox Code Playgroud)
所以我自己做了:
function unique (arr) {
var hash = {}, result = [];
for (var i = 0; i < arr.length; i++)
if (!(arr[i] in hash)) { //it works with objects! in FF, at least
hash[arr[i]] = true;
result.push(arr[i]);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何其他算法被认为是最适合这种情况的(或者如果你看到任何明显的缺陷可以修复),或者,当你在javascript中需要它时你会做什么(我知道jQuery不是只有框架和其他一些可能已经涵盖了这一点).
基本上,我想实现以下内容:
var categories = [];
var products = // some array of product objects
products.map(function(value) {
if(categories.indexOf(value.Category === -1)) categories.push(value.Category);
});
Run Code Online (Sandbox Code Playgroud)
因此,categories数组包含唯一的产品类别列表.
我觉得应该有一个更好的方法去做,但没有想到任何事情.
如果没有,那么可能首先没有必要使用map().我可以这么简单
var categories = [];
var products = // some array of product objects
for (var i = 0; i < products.length; i++) {
if(categories.indexOf(products[i].Category === -1)) categories.push(products[i].Category);
}
Run Code Online (Sandbox Code Playgroud)
更新那些坚持认为它是"如何制作阵列唯一"问题的复制品.我看到了这个帖子,对于我的情况,我认为它不适用.我没有一系列值,我需要使其独特.我有一个对象数组,我需要构建一个唯一值数组.差异可能很微妙 - 但是要了解该主题的用例,我将构建一个非唯一的数组,然后使其唯一.似乎比我原来的解决方案更糟糕
有时我需要打印一个CSS类列表来找到合适的类.
最适合我的是JS控制台中的函数:在输入时加载和过滤JS类列表.
因此,例如,如果我需要记住一个图像类,我正在键入"Img",然后加载一个图像类列表("ImgFolder","ImgPencil"......).
我看到这个问题经常被问到常规的javascript数组,但是如果有一个日期数组,那么答案似乎都无法解决.
我可以通过试验错误地解决这个问题,但如果我问的话,我确实看到了其他人的一些好处.
基本上如果你有一个javascript数组的日期可能有重复,需要过滤到一个没有重复的数组,最好的方法是什么?
我尝试过ES6解决方案,Array.from(new Set(arr))但它只返回相同的数组.
我也试过了
Array.prototype.unique = function() {
var a = [];
for (var i=0, l=this.length; i<l; i++)
if (a.indexOf(this[i]) === -1)
a.push(this[i]);
return a;
}
Run Code Online (Sandbox Code Playgroud)
两者都来自数组中的唯一值
但是没有工作,看起来像是indexOf在日期对象上不起作用.
这是我的数组生成atm的方式
//this is an array generated from ajax data,
//its a year over year comparison with a separate year,
//so to create a reliable date objects I force it to use the same year.
data.map(d => {
dp = new Date(Date.parse(d.date + '-' + d.year)); …Run Code Online (Sandbox Code Playgroud) 我正在尝试为ckeditor中的下拉字段加载动态输入值:
正如您在按下按钮时所看到的,下拉列表中未加载任何值:
我想在我的下拉列表中加载以下值(应该与onLoad函数中的reged匹配):
{{ $slot }}
{{$example }}
{{ $Product2}}
{{$category1 }}
Run Code Online (Sandbox Code Playgroud)
由于代码片段不在堆栈片段上运行,因此我在codepen上完全解决了问题.请参阅以下链接:https://codepen.io/anon/pen/NBXObP
我的插件代码如下所示:
var selectedList = []
CKEDITOR.replace("editor", {
extraPlugins: "insertData"
});
CKEDITOR.plugins.add( 'insertData', {
icons: '',
init: function( editor ) {
editor.addCommand( 'insertData', new CKEDITOR.dialogCommand( 'insertDataDialog' ) );
editor.ui.addButton( 'InsertData', {
label: 'Insert InsertData',
command: 'insertData',
toolbar: 'insert'
});
if ( editor.contextMenu ) {
editor.addMenuGroup( 'insertDataGroup' );
editor.addMenuItem( 'insertDataItem', {
label: 'Edit InsertData',
icon: this.path + 'icons/insertData.png',
command: 'insertData',
group: 'insertDataGroup'
});
editor.contextMenu.addListener( …Run Code Online (Sandbox Code Playgroud) 我有一系列数字,如:[1,4,7,1,2,1,3,1,4].
我想删除重复的元素并对结果进行排序,即所需的结果是:[1,2,3,4,7].
是否有内置的Javascript/jQuery函数来执行此操作,或者我必须编写自己的函数?
我想用DOM元素作为键创建一个哈希.这由以下代码说明:
var hash = {};
var set = function(element, value) { hash[element] = value; };
var get = function(element) { return hash[element]; };
set(document.getElementById('foo'), 'bar');
get(document.getElementById('foo')); // returns 'bar'
Run Code Online (Sandbox Code Playgroud)
如何确保哈希映射到每个哈希值的唯一值Element?
请注意,我不能将原始ID字符串用作键,因为Element可以传入任意字符串,包括那些没有id的字符串.
我有一个带有obejcts电子邮件和Id的数组,所以我想要删除具有相似ID的重复元素.
例:
var newarray=[
{
Email:"test1@gmail.com",
ID:"A"
},
{
Email:"test2@gmail.com",
ID:"B"
},
{
Email:"test3@gmail.com",
ID:"A"
},
{
Email:"test4@gmail.com",
ID:"C"
},
{
Email:"test4@gmail.com",
ID:"C"
}
];
Run Code Online (Sandbox Code Playgroud)
现在我需要删除ID很常见的重复元素.我期待最终的数组是
var FinalArray=[
{
Email:"test1@gmail.com",
ID:"A"
},
{
Email:"test2@gmail.com",
ID:"B"
},
{
Email:"test5@gmail.com",
ID:"C"
}
];
Run Code Online (Sandbox Code Playgroud) javascript ×9
arrays ×6
unique ×2
algorithm ×1
ckeditor ×1
ckeditor4.x ×1
couchdb ×1
css ×1
date ×1
duplicates ×1
electron ×1
hashmap ×1
jquery ×1
react-redux ×1
reactjs ×1
redux ×1
weakmap ×1
wysiwyg ×1